DOM4J的selectNodes(ARG)不给节点列表(Dom4j selectNodes(arg

2019-08-06 18:56发布

我使用dom4j的用于Java的XML工作,我的XML是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<abcd name="ab.catalog" xmlns="http://www.xyz.com/pqr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xyz.com/pqr ./abc.xyz.xsd">             
<efg>
......
</efg>
<efg>
.....
</efg>
</abcd>

然后,

List<Node>list = document.selectNodes("/abcd/efg");

获取列表零的大小。 我觉得这是由于XML指定的命名空间。 我尝试了很多,但cn't获得成功。

Answer 1:

XPath表达式前缀的元素名称是指不在一个命名空间的元素-他们没有考虑“默认”的xmlns="..."命名的文件声明。 你需要声明一个前缀的XPath引擎的命名空间,然后使用前缀的表达。 这里是通过激励一个例子的DOM4J的javadocs :

Map uris = new HashMap();
uris.put("pqr", "http://www.xyz.com/pqr");
XPath xpath = document.createXPath("/pqr:abcd/pqr:efg");
xpath.setNamespaceURIs(uris);
List<Node> nodes = xpath.selectNodes(document);


Answer 2:

修改你的代码:

List<Node>list = document.selectNodes("//abcd/efg");


文章来源: Dom4j selectNodes(arg) don't give list of nodes