首页 文章

相对路径中的Xpath count()

提问于
浏览
0

我正在使用http://www.freeformatter.com/xpath-tester.htmlxpath 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 回答

  • 2

    您可以在任何XPath 2.0或更高版本或XQuery 1.0或更高版本的实现中使用 //urls/url/elements/count(element) 来获取带有计数的整数值序列 . 如果您只有XPath 1.0可用,那么您需要先使用您的宿主语言选择 //urls/url ,然后您可以为每个返回的项目选择 count(elements/element) .

  • 1

    我相信你所寻找的东西是无法做到的......

    //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的结果进行迭代 .

相关问题