如何使用XQuery flwor重新安排节点

时间:2017-10-26 21:18:52

标签: xquery xquery-3.0

我想重新排列下面给出的输入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节点吗?

1 个答案:

答案 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>