2013-11-21 46 views
0

如何在xQuery中首先按特定值排序?如何在xquery中首先按特定值進行排序?

例子:

<xml> 
    <b> 
     <msg>A</msg> 
     <val>5</val> 
    </b> 
    <b> 
     <msg>B</msg> 
     <val>1</val> 
    </b> 
    <b> 
     <msg>C</msg> 
     <val>3</val> 
    </b> 
    <b> 
     <msg>K</msg> 
     <val>2</val> 
    </b> 
    <b> 
     <msg>D</msg> 
     <val>3</val> 
    </b> 
</xml> 

我想獲得基於訂購的價值,但價值應爲3至先在列表中。

回答

3

你可以寫by子句中的順序表達,所以你可以做這樣的事情(有可能是雖然更好的方法):

for $b in //b 
order by if ($b/val = 3) then (0) else (1), $b/msg 
return $b 
2

看來你的價值觀都在自然數集。然後,您可以選擇一個小於自然數中所有其他值的值 - 例如,-1。如果值爲3,則將其替換爲排名-1,否則使用正常值。

for $b in //b 
let $rank := if ($b/val = 3) then -1 else $b/val/number() 
order by $rank ascending 
return $b 

您沒有給出預期輸出的提示。如果你只想要數字或任何輸出,只需修改返回語句。

0
As suggested by Ewout Graswinckel, I followed the steps. It worked. Thanks a lot. 

We can order by more "based-on-condition" by adding "," 

such as like this - 

(for $x in (doc('')) 
order by if ($x//val = 3) then (0) else (1), 
    if (contains($x//msg, 'A')) then (0) else (1) 
return $x 
) 

So after val = 3 , next order by will be anything which contains 'A'. 
相關問題