我想重新排列下面给出的输入xml中的Order标签,以便节点遵循此序列
BUY_ONLY,BOGO,GET_ONLY
这是我的示例Orders.xml Order标签必须根据其中的OrderType标签重新排列
(: XQuery Module :)
declare namespace functx = "http://www.functx.com";
for $order in doc("order.xml")/Orders/Order
let $buyOnly := $order[OrderType/text()="BUY_ONLY"]
let $getOnly := $order[OrderType/text()="GET_ONLY"]
let $bogo := $order[OrderType/text()="BOGO"]
return
<Orders>
{
if(exists($buyOnly) and exists($getOnly) and exists($bogo)) then
(
$buyOnly,
$getOnly,
$bogo
)
else ()
}
</Orders>
我可以在不使用FLWOR表达式的情况下重新排列Order节点吗?
答案 0 :(得分:1)
以下是您在没有任何FLWOR声明的情况下制作的方法:
<Orders>
{
(
doc("order.xml")/Orders/Order[OrderType/text()="BUY_ONLY"],
doc("order.xml")/Orders/Order[OrderType/text()="GET_ONLY"],
doc("order.xml")/Orders/Order[OrderType/text()="BOGO"]
)
}
</Orders>
具有更简化FLWOR的版本:
<Orders>
{
let $order := doc("order.xml")/Orders/Order
return
(
$order[OrderType/text()="BUY_ONLY"],
$order[OrderType/text()="GET_ONLY"],
$order[OrderType/text()="BOGO"]
)
}
</Orders>