在标准Java中迭代XML DOM文档

时间:2012-09-26 21:33:18

标签: java xml dom xerces

标准JavaJ2SE)6(无JDOM或其他第三方库)是否可以直接替换Apache Xerces XML DOM文档解析和迭代类?使用Sun J2SE XML实施,即

com.sun.org.apache.xerces.internal.dom.DocumentImpl
com.sun.org.apache.xerces.internal.dom.NodeIteratorImpl
com.sun.org.apache.xerces.internal.parsers.DOMParser

会导致编译器警告每个使用这些类"是Sun专有API,并且可能会在将来的版本中被删除"。

我目前用于实例化通用NodeIterator对象的代码是

org.w3c.dom.Document document = ...; // Get an XML DOM Document object

org.w3c.dom.NodeIterator iterator = new NodeIteratorImpl(new DocumentImpl(
    document.getDoctype()), document.getDocumentElement(),
    NodeFilter.SHOW_ALL, null, true);

NodeIterator以深度优先搜索顺序访问XML DOM文档的节点,这对我的应用程序至关重要,因此上述代码需要替换为功能相同的内容。

此外,创建新org.w3c.dom.Document对象的最佳(=标准和最快)方式是否类似

Document = DocumentBuilderFactory.newInstance().newDocumentBuilder.parse(source)

其中source是一个正确实例化的org.xml.sax.InputSource对象?

1 个答案:

答案 0 :(得分:3)

NodeIterator是DOM遍历规范的一部分。您可以检查特定Document是否支持testing whether it is an instanceof org.w3c.dom.traversal.DocumentTraversal遍历(JRE中的标准实现应该是)。如果是这样,你可以施展它并做

NodeIterator ni = ((DocumentTraversal)document).createNodeIterator(
      document.getDocumentElement(), NodeFilter.SHOW_ALL, null, true);