Java w3c dom getElementsByTagName 不 return 任何节点

Java w3c dom getElementsByTagName does not return any node

我有这段代码,但只有 list3 的长度不为零。是否可以通过本地标签名称获取节点列表,不带名称空间前缀,如 list4?

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(entry.toFile());
        
        NodeList list = doc.getElementsByTagNameNS("http://wtest2", "entry");
        NodeList list2 = doc.getElementsByTagNameNS("x1", "entry");
        NodeList list3 = doc.getElementsByTagName("x1:entry");
        NodeList list4 = doc.getElementsByTagName("entry");
 

下面是我正在处理的XML:

<?xml version="1.0" encoding="UTF-8"?>
<x1:myroot
        xmlns:bob="urn:test"
        xmlns:x1="http://wtest2"
        version="1.0">
    <bob:header/>
    <x1:entry>
        <x1:data>
            <x1:person>
                <bob:name>test</bob:name>
            </x1:person>
        </x1:data>
    </x1:entry>
    <x1:entry>
        <x1:data>
            <x1:person>
                <bob:name>test2</bob:name>
            </x1:person>
        </x1:data>
    </x1:entry>

</x1:myroot>

由于您创建的 factory/builder 不是命名空间感知的,因此标签名称实际上是“x1:entry”,没有任何命名空间。

您需要致电

dbf.setNamespaceAware(true);

然后

NodeList list = doc.getElementsByTagNameNS("http://wtest2", "entry");

应该可以。您还可以使用“*”作为 namespaceURI 参数的值。