Java XPath计数函数始终返回0.0
我使用下面的xml获取标记“c”的计数Java XPath计数函数始终返回0.0,java,xml,xpath,domdocument,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:
<?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>
但是上面的代码总是返回0.0
我做错了什么吗?如果要计算本地名称为
xyz
的元素,表达式应如下所示:
XPathExpression xpr = xpath.compile("count(//*[local-name()='xyz']/*[local-name()='a']/*[local-name()='b']/*[local-name()='c'])");
不要删除名称空间属性值。这很重要,因为这是实际的名称空间 A
xmlns=“urn:somevalue”
为元素定义默认名称空间。
或
都可以读取为节点名{urn:somevalue}:xyz
XPath 1.0没有默认命名空间。对于命名空间中的节点,始终必须使用前缀
因此,如果在XPath的名称空间解析器中定义前缀ns1
,则表达式为:
count(//ns1:xyz/ns1:a/ns1:b/ns1:c)
首先,您的XPath没有考虑名称空间,但我只是在这里尝试了我的用例。。它给我的输出是5。0@peeppeep您是如何创建输入源的?XPath似乎没有问题。它仍然返回0。0@peeppeep事实证明,同样的技巧也需要应用到其他三个级别(参见编辑和演示)。
count(//ns1:xyz/ns1:a/ns1:b/ns1:c)