java - XML - 如何使用 java 获取子节点数

标签 java xml

我有一个 java 代码,如下所示。按照我的理解,它应该显示父节点的子节点数<parent>在给定的test.xml文件。

try {
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(new File("./test.xml"));
    System.out.println(doc.getElementsByTagName("parent").item(0).getChildNodes().getLength());
} catch(Exception e) {
    e.printStackTrace();
}

这是我的 test.xml文件。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<parent> 
    <sid>hello</sid>
</parent>

在此XML中,父节点的子节点数parent是 1(即 <sid>hello</sid>)。但是上面的代码片段输出为 3。有人可以帮我弄清楚这里发生了什么吗?我是 Java 的新手,感谢您的帮助。

最佳答案

Can anybody please help me to figure out what's happening here?

您的节点parent确实有3子节点:

  1. 包含 <parent> 之间字符的文本节点和 <sid>
  2. <sid>hello</sid>对应的元素节点
  3. 包含 </sid> 之间字符的文本节点和 </parent>

它被称为混合内容,它是在给定元素内混合文本和元素的能力。

如果您尝试使用 <parent><sid>hello</sid></parent> 启动您的程序, 你会得到 1如您所料,因为您在标签之外不再有任何字符。

混合内容 的一个很好的例子是 XHTML在那里你可以有类似的东西

<p>Hello <strong>World</strong></p>

如果你解析这个,元素p会有2节点,因为我们期望一个包含“Hello”的文本节点和一个元素节点<strong>World</strong> .


how can we get the number child nodes(number of sid child nodes) ?

最简单的方法是使用 JDOM dom4j parser 而不是因为它们旨在用于解析纯 XML 数据结构,这正是您在这里需要的。

代码将是 JDOM 的情况:

SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(new File("./test.xml"));
System.out.println(document.getRootElement().getChildren().size());

输出:

1

代码将是 dom4j 的情况:

SAXReader reader = new SAXReader();
Document document = reader.read(new File("./test.xml"));
System.out.println(document.selectNodes("/parent/*").size());

输出:

1

关于java - XML - 如何使用 java 获取子节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39646369/

相关文章:

java - Spring security spring webflow 如何使用用户角色成功登录页面后重定向?

java - 有什么好的 hive 插件教程吗?

java - Java将字符串转为float

java - 谷歌 API 的 Oauth2 超时

java - 双倍我的钱 : my framework uses doubles for monetary amounts

android - 解析 XML : prefix must not be bound to one of the reserved namespace names 时出错

xml - 使用xslt删除基于xml中多个属性的重复节点

python - 如何在Python中解析带有编码声明的XML文件?

html - 如何处理 XSLT 中嵌入的 XML 标记?

xml - 将元素插入 xml 会产生不必要的属性 xmlns=