我一直在使用以下代码结构来遍历 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 是违反直觉的。
换句话说,您将如何编写上述函数以将 aElement
或 aNode
作为参数?
更新
解决方案似乎是:
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 ...
}