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 参数的值。
我有这段代码,但只有 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 参数的值。