8

我在 java 中使用 DOM4j 进行 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 中指定的命名空间。我尝试了很多,但没有成功。

4

2 回答 2

14

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);
于 2013-01-14T13:18:49.927 回答
-5

修改您的代码:

List<Node>list = document.selectNodes("//abcd/efg");
于 2013-11-14T16:29:55.673 回答