Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML-如何使用java获取子节点计数_Java_Xml - Fatal编程技术网

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

XML-如何使用java获取子节点计数,java,xml,Java,Xml,我有一个java代码,如下所示。根据我的理解,它应该在给定的test.xml文件中显示父节点的子节点数 try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.parse(new File("./

我有一个java代码,如下所示。根据我的理解,它应该在给定的
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();
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<parent> 
    <sid>hello</sid>
</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();
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<parent> 
    <sid>hello</sid>
</parent>

你好
在此XML中,父节点
parent
的子节点数为1(即,
hello
)。但上面的代码段输出为3。有人能帮我弄清楚这里发生了什么吗?我是java的新手,非常感谢你的帮助

有人能帮我弄清楚这里发生了什么吗

您的节点
父节点
确实有
3个子节点:

  • 包含介于
  • hello
  • 包含介于
  • 它被称为混合内容,是在给定元素中混合文本和元素的能力

    如果您尝试使用
    hello
    启动程序,您将获得预期的
    1
    ,因为您在标记外不再有字符

    混合内容的一个很好的例子是
    XHTML
    ,您可以在其中

    <p>Hello <strong>World</strong></p>
    
    输出:

    SAXBuilder saxBuilder = new SAXBuilder();
    Document document = saxBuilder.build(new File("./test.xml"));
    System.out.println(document.getRootElement().getChildren().size());
    
    1
    
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("./test.xml"));
    System.out.println(document.selectNodes("/parent/*").size());
    
    1
    
    如果出现
    dom4j

    SAXBuilder saxBuilder = new SAXBuilder();
    Document document = saxBuilder.build(new File("./test.xml"));
    System.out.println(document.getRootElement().getChildren().size());
    
    1
    
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("./test.xml"));
    System.out.println(document.selectNodes("/parent/*").size());
    
    1
    
    输出:

    SAXBuilder saxBuilder = new SAXBuilder();
    Document document = saxBuilder.build(new File("./test.xml"));
    System.out.println(document.getRootElement().getChildren().size());
    
    1
    
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("./test.xml"));
    System.out.println(document.selectNodes("/parent/*").size());
    
    1
    

    检查每个节点的类型。并非所有子节点都是元素节点。我想你会发现只有一个子节点是Element类型的。为什么它输出3而不是1?代码段是否对所有节点(包括
    父节点
    )进行计数?我有相同的XML文件,其相关子节点(sid)正在动态创建它们。它遵循与给定问题相同的结构,因此将有这些类型的“隐藏”文本字段。那么,我们如何获得子节点的数量(sid
    sid
    child节点的数量)?