<?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
,则最大步数为3
,0775543754
为2
,依此类推。
提前很多。
这是对的吗?
//user[@number='0772243950']/step[fn:max((@stepnumber))]
答案 0 :(得分:1)
max()
函数仅在XPath 2.0及更高版本中定义。
一个XPath 2.0表达式,用于查找step
个user
子项的最大步数,其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])