4

我有以下包含默认命名空间的 XML

<?xml version="1.0"?>
<catalog xmlns="http://www.edankert.com/examples/">
  <cd>
    <artist>Stoat</artist>
    <title>Future come and get me</title>
  </cd>
  <cd>
    <artist>Sufjan Stevens</artist>
    <title>Illinois</title>
  </cd>
  <cd>
    <artist>The White Stripes</artist>
    <title>Get behind me satan</title>
  </cd>
</catalog>

我运行下面的代码,期待一些结果

Element rootElem = new Builder().build(xml).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("", "http://www.edankert.com/examples/");   
Nodes matchedNodes = rootElem.query("cd/artist", xc);
System.out.println(matchedNodes.size());

但大小始终为 0。

我经过

期待任何帮助。

4

1 回答 1

4

XPath 中无前缀的名称总是意味着“没有命名空间”——它们不尊重默认的命名空间声明。您需要使用前缀

Element rootElem = new Builder().build(xml).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("ex", "http://www.edankert.com/examples/");   
Nodes matchedNodes = rootElem.query("ex:cd/ex:artist", xc);
System.out.println(matchedNodes.size());

XPath 表达式使用原始文档未使用的前缀无关紧要,只要绑定到 XPath 命名空间上下文中前缀的命名空间 URIxmlns与文档中绑定的 URI 相同.

于 2013-01-15T11:27:47.653 回答