Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XPath计数函数始终返回0.0_Java_Xml_Xpath_Domdocument - Fatal编程技术网

Java XPath计数函数始终返回0.0

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获取标记“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>
但是上面的代码总是返回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)