如何处理Nodelist中的所有节点

时间:2014-12-16 11:04:44

标签: java xml recursion nodelist

我正在尝试处理节点列表中的所有节点并替换文本中的特殊字符。

我面临的问题是我需要返回一个包含所有替换值的对象。如果我使用递归,则无法返回值吗?

如何迭代处理所有元素并删除特殊字符的xml nodelist?我目前的工作是做这个

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;
}

但是,这并未考虑在这些文档中定期更改并且通常嵌套得很深的子节点

由于

1 个答案:

答案 0 :(得分:0)

递归通常是深度处理DOM的最简单方法:

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, ""));
                }
            }
        }
    }
}