Xml 如何在xquery中首先按特定值排序?

Xml 如何在xquery中首先按特定值排序?,xml,xquery,Xml,Xquery,如何在xQuery中首先按特定值排序 例如: <xml> <b> <msg>A</msg> <val>5</val> </b> <b> <msg>B</msg> <val>1</val> </b> <b> <

如何在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>

A.
5.
B
1.
C
3.
K
2.
D
3.

我想基于排序值进行获取,但列表中的第一个值应该是3。

您可以在order by子句中编写一个表达式,这样您就可以执行类似操作(尽管可能有更好的方法):


您可以在ORDERBY子句中编写一个表达式,这样您就可以这样做(尽管可能有更好的方法):


你的价值观似乎都是自然数。然后,您可以选择一个小于自然数中所有其他值的值——例如,
-1
。如果值为
3
,则将其替换为
-1
,否则使用正常值进行排名

中的$b//b
设$rank:=如果($b/val=3),则-1否则$b/val/number()
按$rank升序排序
返回$b

您没有给出任何关于预期输出的提示。如果您只需要数字或任何输出,只需修改return语句。

您的值似乎都在自然数的集合中。然后,您可以选择一个小于自然数中所有其他值的值——例如,
-1
。如果值为
3
,则将其替换为
-1
,否则使用正常值进行排名

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'.
中的$b//b
设$rank:=如果($b/val=3),则-1否则$b/val/number()
按$rank升序排序
返回$b
您没有给出任何关于预期输出的提示。如果只需要数字或任何输出,只需修改return语句即可

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'.