XPath Count函数始终返回0.0

时间:2014-11-26 13:40:43

标签: java xml xpath domdocument

我使用xml以下来获取标记的数量' c'。

<?xml version='1.0' encoding='UTF-8'?>
<xyz xmlns=".....">
<a>
  <b>
    <c>X:1 Y:0</c>
    <c>X:1 Y:0</c>
    <c>X:2 Y:0</c>
  </b>
  <b>
    <c>X:1 Y:0</c>
    <c>X:2 Y:0</c>
  </b>
</a>
</xyz>

以下是我的java代码:

xpath = factory.newXPath();
xpr = xpath.compile("count(//xyz/a/b/c)");
System.out.println(xpr.evaluate(inputSource, XPathConstants.NUMBER));

但上面的代码总是返回0.0

我做错了吗?

2 个答案:

答案 0 :(得分:2)

如果要计算本地名称为xyz的元素,则表达式应如下所示:

XPathExpression xpr = xpath.compile("count(//*[local-name()='xyz']/*[local-name()='a']/*[local-name()='b']/*[local-name()='c'])");

Demo.

答案 1 :(得分:1)

不要删除命名空间属性值。这很重要,因为那是实际的命名空间。

xmlns="urn:somevalue"定义元素的默认命名空间。 <xyz xmlns="urn:somevalue"/><ns1:xyz xmlns:ns1="urn:somevalue"/>都可以作为节点名称{urn:somevalue}:xyz读取。

XPath 1.0没有默认命名空间。您总是必须为命名空间中的节点使用前缀。

因此,如果在XPath的命名空间解析器中定义前缀ns1,则表达式为:

count(//ns1:xyz/ns1:a/ns1:b/ns1:c)