Java w3c dom getElementsByTagName不返回任何节点



我有这个代码,只有list3的长度不同于零。有没有可能像list4那样,通过本地标记名称,不带名称空间前缀来获取nodelist?

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>

由于您创建的工厂/构建器不支持名称空间,因此标记名称实际上是"x1:条目";,没有任何命名空间。

你需要打电话给

dbf.setNamespaceAware(true);

然后

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

应该起作用。您也可以使用"*"作为namespaceURI参数的值。

最新更新