我使用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
我做错了吗?
答案 0 :(得分:2)
如果要计算本地名称为xyz
的元素,则表达式应如下所示:
XPathExpression xpr = xpath.compile("count(//*[local-name()='xyz']/*[local-name()='a']/*[local-name()='b']/*[local-name()='c'])");
答案 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)