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

标签 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") 也会返回内部元素。

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

最佳答案

您怀疑 getElementsByTagName()对你的问题不起作用是正确的。 documentation来自org.w3c.dom.NodeListgetElementsByTagName()

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
}

关于java - 使用 DOM 解析器 Java 解析具有嵌套重复元素名称的 xml 文档。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28944891/

相关文章:

java - 使用 Spring Security 保护 Spring Cloud 功能

java - 在 SocketChannel 上通过 TCP 读取未定义字节数的流

java - 如何将“&”符号放入 Word 2007 .docx XML 文件中?

c# - 在 C# 中转换 JSON 字符串

python - 在 Beautiful Soup 中找不到 <span> 标签内的元素

java - VTD-XML:对象初始化后,它们仍然引用 null

Java Swing 导入 CSS 样式

javascript - 解析 Youtube 视频源 XML

c# - 如何读取具有命名空间的 XPathDocument

java - 以编程方式访问网页