简体   繁体   English

为什么XQUERY不能仅输出变量,而不能输出变量下面的所有元素?

[英]Why won't XQUERY output just the variable and not all of the elements beneath it?

I am very new to Xquery and am very confused about a principle. 我对Xquery还是很陌生,对一个原则也很困惑。 I am trying to output a variable that is written in my XML document but every time I try to output the variable all of the nodes underneath it output as well. 我试图输出一个写在XML文档中的变量,但是每次我尝试输出该变量时,也要输出该变量下面的所有节点。 Here is my 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>

And I would like my output to be: 我希望我的输出是:

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

Here is my XQuery 这是我的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>

But when I run it I get (This is just an example for one person): 但是当我运行它时,我得到了(这只是一个人的示例):

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

Why can't I just output the variable PurchaseOrderNumber without all of the other information attached to it? 为什么我不能只输出变量PurchaseOrderNumber而没有附加所有其他信息?

Thanks for your help! 谢谢你的帮助!

The good news is: You can absolutely do this. 好消息是:您绝对可以做到这一点。 You are currently just doing it wrong. 您当前只是在做错事情。 When you define {$purchaseOrder[@PurchaseOrderNumber]} it means to give all purcharse orders which do habe a purchase order number. 当您定义{$purchaseOrder[@PurchaseOrderNumber]}这意味着要给所有具有采购订单编号的采购订单。 [] is a predicate, so just to filter out elements in your result set. []是一个谓词,因此仅用于过滤结果集中的元素。 If you want the attribute value you can do a path step as you did in other parts of your query: 如果需要属性值,可以像在查询的其他部分中一样执行路径步骤:

{$purchaseOrder/@PurchaseOrderNumber}

However, outputting attributes directly is not necessarily defined, so you most likely want to use just the attribute value. 但是,不一定要直接输出属性,因此您很可能只想使用属性值。 Also, as an attribute does not have a surrounding element you will have to do 另外,由于属性没有周围的元素,因此您必须做

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

to get your desired result. 得到您想要的结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM