计算属性的子字符串等于某个值的节点数

时间:2015-05-15 12:22:35

标签: xml xpath

示例:尝试计算作为图像的b节点数。

XML:

<a>
 <b mediatype='image/jpeg'>
  <c>hello.jpg</c>
 </b>
</a>

的XPath:

count(//b[substring(@mediatype, 0, 5) = 'image'])

使用Xpath测试程序:http://codebeautify.org/Xpath-Tester 评估为0.0

感谢答案,根据给出的信息以及使用start-with改进的XPath选择了最佳答案。

4 个答案:

答案 0 :(得分:2)

在XPath中,索引从1开始。

count(//b[substring(@mediatype, 1, 5) = 'image'])

答案 1 :(得分:2)

似乎是需要为1的起始索引。

count(//b[substring(@mediatype, 1, 5) = 'image']) 

以上xpath评估为1.0

答案 2 :(得分:2)

正如其他人指出的那样,最初的问题是xpath索引从1而不是0开始。

使用starts-with()可以更方便地实现文本开头的子字符串 - 避免使用硬编码索引:

count(//b[starts-with(@mediatype,'image')])

答案 3 :(得分:1)

在XPath位置(对于列表和字符串)以1开头。

如果您尝试substring(//b/@mediatype, 0, 5),您将获得imag

所以你需要count(//b[substring(@mediatype, 1, 5) = 'image'])

但在这个特定情况下,我建议starts-with()

count(//b[starts-with(@mediatype, 'image/')])