【问题标题】:Parsing a xml doc with nested repetitive element names with DOM parser Java.使用 DOM 解析器 Java 解析具有嵌套重复元素名称的 xml 文档。
【发布时间】:2015-03-09 14:48:59
【问题描述】:

我正在尝试解析一个类似于以下内容的 XML 文档:

<!-- language: lang-xml -->
<map>
 <entry>
  <string>rowId : 1231231</string>
  <map>
   <entry>
    <string>some strings</string>
   </entry>
   <entry>
    </string>some more strings!</string>
   </entry>
  </map>
 </entry>
</map>

我在解析 xml 文件时总是使用 getElementsByTagName 方法。但在这种情况下,我不知道如何只获取外部元素然后获取内部元素。似乎通过调用 getElementsByTagName ("entry") 也会返回内部元素。

关于如何解析这个文档有什么建议吗? 谢谢

【问题讨论】:

    标签: java xml parsing dom nested


    【解决方案1】:

    您怀疑getElementsByTagName() 无法解决您的问题是正确的。来自org.w3c.dom.NodeListdocumentation 表示getElementsByTagName()

    返回具有给定标签名称并包含在文档中的所有元素的节点列表。

    要正确解析,您必须使用 XPath。下面是一些示例代码,它将获取所有 &lt;entry&gt; 标签:

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse("yourfile.xml");
    XPathFactory xPathfactory = XPathFactory.newInstance();
    XPath xpath = xPathfactory.newXPath();
    XPathExpression expr = xpath.compile("//entry");
    
    Object set = expr.evaluate(doc, XPathConstants.NODESET);
    
    NodeList list = (NodeList) set;
    int count = list.getLength();
    for (int i = 0; i < count; i++) {
        Node node = list.item(i);
        // Handle the entry node here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2012-11-02
      • 2020-12-11
      相关资源
      最近更新 更多