2010-07-17 137 views
3
<?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> 

给定一个数字,我想要查找步骤列表中的最大步数。与具有属性最大值的元素匹配的XPath

我已经得到了迄今//user[@number='0775547857']/step[@stepnumber]

,我想我必须使用FN:最大的功能,但我有关于如何使用max函数传递步骤序号清单麻烦。

例如:如果我给号码0775547857,最大步号为3,对于0775543754,它是2等等。

提前很多感谢。

这是正确的吗?

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

好问题(1)。请参阅我的答案以获取解释并分离XPath 2.0和XPath 1.0解决方案。 – 2010-07-17 16:57:40

回答

1

max()函数被定义仅在XPath 2.0和以上。

一个XPath 2.0表达式找到最大STEPNUMBER一个user具有number属性具有值$pNumstep儿童

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

$pnum0775547857和评价这个XPath 2.0在以下XML文档上表达:

<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 
0

尝试这种情况: fn:max(//user[@number='0775547857']/step[@stepnumber])

相关问题