使用DOM解析器Java解析具有嵌套重复元素名称的xml doc。

时间:2015-03-09 14:49:00

标签: java xml parsing dom nested

我正在尝试解析一个类似于下面的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”)也会返回内部元素。

有关如何解析此文档的任何建议? 感谢

1 个答案:

答案 0 :(得分:0)

您怀疑getElementsByTagName()对您的问题不起作用是正确的。来自org.w3c.dom.NodeList的{​​{3}}表示getElementsByTagName()

  

以文档顺序返回具有给定标记名称的所有元素的NodeList,并包含在文档中。

要正确解析,您必须使用XPath。以下是一些示例代码,它将获取所有<entry>标记:

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
}