XPath匹配具有属性最大值的元素

时间:2010-07-17 16:31:18

标签: xpath

<?xml version="1.0" encoding="ISO-8859-1"?>

<users>

<user number="0775547857">
   <step stepnumber="1">complete</step>
   <step stepnumber="2">complete</step>
   <step stepnumber="3">complete</step>
</user>

<user number="0775543754">
   <step stepnumber="1">complete</step>
   <step stepnumber="2">complete</step>
</user>

<user number="0777743059">
   <step stepnumber="1">complete</step>
</user>

</users>

给定一个数字,我想在步骤列表中找到最大步数。

到目前为止我所得到的是//user[@number='0775547857']/step[@stepnumber]

我认为我必须使用fn:max函数,但我在如何使用max函数传递步骤数列表方面遇到了麻烦。

示例:如果我给出号码0775547857,则最大步数为307755437542,依此类推。

提前很多。

这是对的吗?

//user[@number='0772243950']/step[fn:max((@stepnumber))]

2 个答案:

答案 0 :(得分:1)

max()函数仅在XPath 2.0及更高版本中定义。

一个XPath 2.0表达式,用于查找stepuser子项的最大步数,其number属性值$pNum

max(/*/user[@number=$pNum]/step/@stepnumber/xs:integer(.))

$pnum替换为0775547857并在以下XML文档上评估此XPath 2.0表达式:

<users>
    <user number="0775547857">
        <step stepnumber="1">complete</step>
        <step stepnumber="11">complete</step>
        <step stepnumber="2">complete</step>
        <step stepnumber="3">complete</step>
    </user>
    <user number="0775543754">
        <step stepnumber="1">complete</step>
        <step stepnumber="2">complete</step>
    </user>
    <user number="0777743059">
        <step stepnumber="1">complete</step>
    </user>
</users>

生成想要的正确结果

11

请注意:如果我们想要找到整数值的最大值,则必须使用上面的xs:integer(.)。没有它,最大值将在字符串中找到,3将大于11

在XPath 1.0中,以下XPath表达式返回所需的最大值

/*/user[@number=$pNum]/step
            [not(@stepnumber
                <
                 ../step/@stepnumber
                 )
            ]
              /@stepnumber

答案 1 :(得分:0)

试试这个: fn:max(//user[@number='0775547857']/step[@stepnumber])