我有一个 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
子节点:
- 包含
<parent>
之间字符的文本节点和<sid>
<sid>hello</sid>
对应的元素节点- 包含
</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/