[英]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.