2014-12-16 4 views
0

노드 목록의 모든 노드를 처리하고 텍스트의 특수 문자를 바꾸려고합니다.Nodelist에서 모든 노드를 처리하는 방법

내가 직면 한 문제는 내가 교체 한 모든 값을 포함하는 객체를 반환해야한다는 것입니다. 재귀를 사용하면 값을 반환 할 수 없습니다.

모든 요소를 ​​처리하고 특수 문자를 제거하는 XML 노드리스트를 반복 할 수 있습니까? 순간 내 apporach이

public static IXMLDatagram removeIllegalCharsFromDataGram(IXMLDatagram dg, String[] illegalValues) 
{ 
    NodeList nodeList = dg.getAsDOMElement().getElementsByTagName("*"); 
    for (int i = 0 ; i < nodeList.getLength() ; i++) 
    { 
     Node node = nodeList.item(i); 
     if (node.getNodeType() == Node.ELEMENT_NODE) 
     { 

      for(String replaceChar : illegalValues) 
      { 
       // do something with the current element 
       if(node.getTextContent().contains(replaceChar)) 
       { 
        node.setTextContent(node.getTextContent().replace(replaceChar, "")); 
       } 
      } 
     } 
    } 
    return dg; 
} 

을하는 것입니다 그러나 이것은이 문서에서 정기적으로 변경 종종 재귀가

감사

+0

모든 노드 /리스트를 사전 작성하여 모든 종류의 'List'에 배치 한 다음 대신에'List'를 처리 할 수 ​​있습니다. – MadProgrammer

+0

그런 다음 원래 객체에서 노드를 어떻게 다시 대체합니까? – Biscuit128

+1

왜 필요한가요? 실제 객체의 내용을 수정하고 있습니다. DOM에서 제거되지 않았습니다. 단지 참조를 유지하고 있습니다 ... – MadProgrammer

답변

0

을 상당히 깊은 중첩 된 자식 노드를 고려하지 않습니다

public static void removeIllegalCharsFromDataGram(IXMLDatagram dg, 
     String[] illegalValues) { 
    Node root = dg.getAsDOMElement().getDocumentElement(); 
    removeIllegal(illegalValues, root); 
} 
private static void removeIllegal(String[] illegalValues, Node root) { 
    NodeList nodeList = root.getChildNodes(); 
    for (int i = 0; i < nodeList.getLength(); i++) { 
     Node node = nodeList.item(i); 

     removeIllegal(illegalValues,node);//<-- Call for every child 

     if (node.getNodeType() == Node.ELEMENT_NODE) { 

      for (String replaceChar : illegalValues) { 
       // do something with the current element 
       if (node.getTextContent().contains(replaceChar)) { 
        node.setTextContent(node.getTextContent().replace(
          replaceChar, "")); 
       } 
      } 
     } 
    } 
} 
관련 문제