我有一个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的新手,感谢您的帮助。
答案 0 :(得分:3)
有人可以帮我弄清楚这里发生了什么吗?
您的节点parent
确实有3
个子节点:
<parent>
和<sid>
<sid>hello</sid>
</sid>
和</parent>
它被称为混合内容,它能够在给定元素中混合文本和元素。
如果您尝试使用<parent><sid>hello</sid></parent>
启动程序,则会得到1
,因为您在标记之外不再有任何字符。
混合内容的一个很好的例子是XHTML
,您可以在其中找到类似
<p>Hello <strong>World</strong></p>
如果你解析它,元素p
将有2
个节点,因为我们期望一个文本节点包含&#34; Hello
&#34;和元素节点<strong>World</strong>
。
我们如何获得数字子节点(
sid
个子节点的数量)?
最简单的方法是使用JDOM
或dom4j
解析器,因为它们用于解析您需要的纯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