我对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而没有附加所有其他信息?
感谢您的帮助!
答案 0 :(得分:3)
好消息是:你绝对可以做到这一点。你现在只是做错了。当您定义{$purchaseOrder[@PurchaseOrderNumber]}
时,它意味着给出所有可能具有采购订单编号的购买订单。 []
是谓词,因此只是过滤掉结果集中的元素。如果您想要属性值,则可以像查询的其他部分一样执行路径步骤:
{$purchaseOrder/@PurchaseOrderNumber}
但是,不一定直接输出属性,因此您很可能只想使用属性值。此外,由于属性没有周围元素,您将不得不这样做
<OrderID>{$purchaseOrder[@PurchaseOrderNumber]/string()}</OrderID>
获得理想的结果。