我正在使用http://www.freeformatter.com/xpath-tester.html( xpath 1.0 )测试一些xpath表达式
我有这个xml代码
<urls>
<url uri="http://example.com/pingtest.html">
<elements>
<element title="header" xpath="My header"></element>
</elements>
</url>
<url uri="http://example.com/othertest.html">
<elements>
<element title="header3" xpath="Third header"/>
<element title="header2" xpath="Second header"/>
</elements>
</url>
</urls>
通常当我使用// element / @ title查询xpath时,我实际上得到了
Attribute ='title =“header”'Attribute ='title =“header3”'Attribute ='title =“header2”'
我正在寻找的是一种通过url获取元素数量的方法 . 它可能是这样的 . 当我查询时:
//urls/url/elements/count(element)
我应该得到(编辑:正如@Ian Roberts所说,这个查询在xpath 2.0中有效):
Double ='1.0'Double ='2.0'
有没有办法在单个xpath表达式中执行此操作?
一些 failing examples :
这将返回所有元素3的计数(不是我正在寻找的)
count(//urls/url/elements/element)
这将返回所有元素列表2的计数(两者都不是我要找的)
count(//urls/url/elements)
我需要这个,因为我需要知道xml对每个url有多少元素,所以我可以在之后使用这个计数
2 回答
您可以在任何XPath 2.0或更高版本或XQuery 1.0或更高版本的实现中使用
//urls/url/elements/count(element)
来获取带有计数的整数值序列 . 如果您只有XPath 1.0可用,那么您需要先使用您的宿主语言选择//urls/url
,然后您可以为每个返回的项目选择count(elements/element)
.我相信你所寻找的东西是无法做到的......
//element/@title
在XML中搜索包含具有title属性的元素的路径;然后返回这些属性的数组及其值 .//urls/url
返回包含元素url的元素url的路径的xml元素数组 .count(/elements/element)
然后对上述每个路径中的elements
元素下的element
元素的数量执行计数功能 .试图将这些放入单个xpath会给我们
//urls/url/count(/elements/element)
. 这里的问题是xpath用于两个目的:匹配我们感兴趣的元素的路径
对该路径中的项目执行聚合功能 .
但是,xpath只能用于一个函数或另一个函数(例如,取决于它是从
match
还是select
语句调用 .因此(根据@ MartinHonnen的回答),您需要先进行匹配,然后通过执行select的结果进行迭代 .