使用 DOM 解析器 Java 解析具有嵌套重复元素名称的 xml 文档。
Parsing a xml doc with nested repetitive element names with DOM parser Java.
我正在尝试解析一个 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") 也会 return 内部元素。
关于如何解析此文档的任何建议?
谢谢
您怀疑 getElementsByTagName()
对您的问题不起作用是正确的。 org.w3c.dom.NodeList
中的 documentation 表示 getElementsByTagName()
Returns a NodeList of all the Elements in document order with a given tag name and are contained in the document.
要正确解析,您必须使用 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
}
我正在尝试解析一个 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") 也会 return 内部元素。
关于如何解析此文档的任何建议? 谢谢
您怀疑 getElementsByTagName()
对您的问题不起作用是正确的。 org.w3c.dom.NodeList
中的 documentation 表示 getElementsByTagName()
Returns a NodeList of all the Elements in document order with a given tag name and are contained in the document.
要正确解析,您必须使用 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
}