我正在使用http://www.freeformatter.com/xpath-tester.html测试一些xpath表达式( xpath 1.0 )
我有这个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时,我实际上得到了
属性=&#39;标题=&#34;头&#34;&#39;属性=&#39;标题=&#34; header3&#34;&#39; 属性=&#39;标题=&#34; HEADER2&#34;&#39;
我正在寻找的是通过网址获取元素数量的方法。它可能是这样的。当我查询:
//urls/url/elements/count(element)
我应该得到(编辑:正如@Ian Roberts所说,这个查询在xpath 2.0中有效):
双=&#39; 1.0&#39;双=&#39; 2.0&#39;
有没有办法在单个xpath表达式中执行此操作?
一些失败的例子:
这将返回所有元素3的计数(不是我正在寻找的)
count(//urls/url/elements/element)
这将返回所有元素列表2的计数(不是我正在寻找的)
count(//urls/url/elements)
我需要这个,因为我需要知道xml对每个url有多少个元素,所以我之后可以使用这个数量
答案 0 :(得分:2)
您可以在任何XPath 2.0或更高版本或XQuery 1.0或更高版本的实现中使用//urls/url/elements/count(element)
来获取带有计数的整数值序列。如果您只有XPath 1.0,那么您需要先用您的主机语言选择//urls/url
,然后您可以为每个返回的项目选择count(elements/element)
。
答案 1 :(得分:1)
我相信你所寻找的东西是无法做到的......
//element/@title
在XML中搜索包含带title属性的元素的路径;然后返回这些属性的数组及其值。
//urls/url
返回包含元素url的元素url的路径的xml元素数组。
count(/elements/element)
然后对上述每条路径中element
元素下elements
个元素的数量执行计数功能。
尝试将这些放入单个xpath会给我们//urls/url/count(/elements/element)
。
这里的问题是xpath用于两个目的:
然而,xpath只能用于一个函数或另一个函数(例如,取决于它是从match
还是select
语句调用。
因此(根据@ MartinHonnen的回答),您需要先进行匹配,然后通过执行select的结果进行迭代。