相对路径中的 Xpath count()



我正在使用 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 时,我实际上得到了

属性='标题="标题"' 属性='标题="标题3"' 属性='标题="标题2"'

我正在寻找的是一种按 url 获取元素计数的方法。可能是这样的。当我查询时:

//urls/url/elements/count(element)

我应该得到(编辑:正如@Ian罗伯茨所说,这个查询在xpath 2.0中是有效的):

双精度='1.0' 双精度='2.0'

有没有办法在单个 xpath 表达式中执行此操作?

一些失败的例子

这返回所有元素 3 的计数(不是我要找的)

count(//urls/url/elements/element)

这将返回所有元素列表 2 的计数(都不是我要找的)

count(//urls/url/elements)

我需要这个,因为我需要知道每个 url 的 xml 有多少个元素,所以我以后可以使用这个计数

您可以将

//urls/url/elements/count(element)与任何 XPath 2.0 或更高版本或 XQuery 1.0 或更高版本的实现一起使用,以获取包含计数的整数值序列。如果只有 XPath 1.0 可用,则需要先以主机语言选择//urls/url,然后可以为每个返回的项目选择 count(elements/element)

我相信

你要找的东西是做不到的......

//element/@title XML 中搜索包含具有 title 属性的元素的路径;然后返回这些属性及其值的数组。

//urls/url返回一个 XML 元素数组,这些路径的元素 URL 包含元素 URL。 然后,count(/elements/element)对上述每个路径中elements元素下的element元素数执行计数函数。

尝试将这些放入单个 xpath 中会给我们带来 //urls/url/count(/elements/element) .这里的问题是 xpath 用于两个目的:

  • 将路径与我们感兴趣的元素匹配
  • 对该路径中的项执行聚合功能。

但是,xpath 只能用于一个函数或另一个函数(例如,取决于它是从 match 语句还是从 select 语句调用的。

因此(根据@MartinHonnen的答案),您需要先进行匹配,然后通过执行选择的结果进行迭代。

最新更新