2014-12-16 2 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, "")); 
       } 
      } 
     } 
    } 
}