为什么XQUERY只输出变量而不是它下面的所有元素?

时间:2015-12-12 15:05:15

标签: xml xquery

我对Xquery很新,对一个原则非常困惑。我试图输出一个写在我的XML文档中的变量,但每次我尝试输出变量时,它下面的所有节点都输出。这是我的XML:

<PurchaseOrders>
  <PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
    <Address Type="Shipping">
      <Name>Ellen Adams</Name>
      <City>Seattle</City>
    </Address>
    <Address Type="Billing">
      <Name>Tai Yee</Name>
      <City>Denver</City>
    </Address>
  </PurchaseOrder>

  <PurchaseOrder PurchaseOrderNumber="99505" OrderDate="1999-10-22">
    <Address Type="Shipping">
      <Name>Cristian Osorio</Name>
      <City>Seattle</City>
    </Address>
  </PurchaseOrder>
 </PurchaseOrders>

我希望我的输出是:

<Orders>
  <Order>
    <Name>Ellen Adams</Name>
    <OrderID>99503<OrderID>
  </Order>
  <Order>
    <Name>Cristian Osorio</Name>
    <OrderID>99505</OrderID>
  </Order>

这是我的XQuery

<Orders> {
  for $purchaseOrder in /PurchaseOrders/PurchaseOrder[Address/@Type='Shipping']
    let $shippingAddress := $purchaseOrder/Address[@Type='Shipping']
    where $shippingAddress/City ='Seattle'
    return <order> {$shippingAddress/Name} {$purchaseOrder[@PurchaseOrderNumber]}</order>
  }
  </Orders>

但是当我运行它时,我得到了(这只是一个人的例子):

<Orders>
  <order>
    <Name>Cristian Osorio</Name>
    <PurchaseOrder PurchaseOrderNumber="99505" OrderDate="1999-10-22">
      <Address Type="Shipping">
        <Name>Cristian Osorio</Name>
        <City>Seattle</City>
      </Address>
      <Address Type="Billing">
        <Name>Cristian Osorio</Name>
        <City>Seattle</City>
      </Address>
    </PurchaseOrder>
  </order>

为什么我不输出变量PurchaseOrderNumber而没有附加所有其他信息?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

好消息是:你绝对可以做到这一点。你现在只是做错了。当您定义{$purchaseOrder[@PurchaseOrderNumber]}时,它意味着给出所有可能具有采购订单编号的购买订单。 []是谓词,因此只是过滤掉结果集中的元素。如果您想要属性值,则可以像查询的其他部分一样执行路径步骤:

{$purchaseOrder/@PurchaseOrderNumber}

但是,不一定直接输出属性,因此您很可能只想使用属性值。此外,由于属性没有周围元素,您将不得不这样做

<OrderID>{$purchaseOrder[@PurchaseOrderNumber]/string()}</OrderID>

获得理想的结果。