我一直在使用以下代码结构遍历XML文档,并且效果很好:

import org.w3c.dom.traversal.*;
...

private static SomeReturnType traverse(Document doc) {
    DocumentTraversal dt = (DocumentTraversal) doc; // line-a
    NodeIterator i = dt.createNodeIterator(doc, NodeFilter.SHOW_ELEMENT, null, false);
    Node node = i.nextNode();
    while (node != null) {
        // do stuff
        node = i.nextNode();
    }
    return ...
}


但是,如何概括以上内容以允许遍历文档的随机XML元素,而不仅仅是整个文档?从理论上讲,这应该很容易,因为在XML中,文档可以简单地看作是最外层的元素,但API是违反直觉的。

换句话说,您将如何编写上述函数以使用ElementNode作为参数?

更新

解决方案似乎是:

private static SomeReturnType traverse(Node rootNode) {
    DocumentTraversal dt = (DocumentTraversal) rootNode.getOwnerDocument();
    NodeIterator i = dt.createNodeIterator(rootNode, NodeFilter.SHOW_ELEMENT, null, false);
    Node node = i.nextNode();
    while (node != null) {
        // do stuff
        node = i.nextNode();
    }
    return ...
}

最佳答案

让您的方法采用Node而不是Document。请注意,DocumentTraversal采用Node

10-08 19:57