2010-07-17 108 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])

相關問題