为什么 XQUERY 不只输出变量而不输出它下面的所有元素?
Why won't XQUERY output just the variable and not all of the elements beneath it?
我刚接触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 而没有附加所有其他信息?
感谢您的帮助!
好消息是:你绝对可以做到这一点。你目前只是做错了。当您定义 {$purchaseOrder[@PurchaseOrderNumber]}
时,它意味着给所有确实有采购订单号的采购订单。 []
是一个谓词,所以只是为了过滤掉结果集中的元素。如果您想要属性值,您可以像在查询的其他部分中那样执行路径步骤:
{$purchaseOrder/@PurchaseOrderNumber}
但是,不一定定义直接输出属性,因此您很可能只想使用属性值。此外,由于属性没有周围的元素,您将不得不这样做
<OrderID>{$purchaseOrder[@PurchaseOrderNumber]/string()}</OrderID>
以获得您想要的结果。
我刚接触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 而没有附加所有其他信息?
感谢您的帮助!
好消息是:你绝对可以做到这一点。你目前只是做错了。当您定义 {$purchaseOrder[@PurchaseOrderNumber]}
时,它意味着给所有确实有采购订单号的采购订单。 []
是一个谓词,所以只是为了过滤掉结果集中的元素。如果您想要属性值,您可以像在查询的其他部分中那样执行路径步骤:
{$purchaseOrder/@PurchaseOrderNumber}
但是,不一定定义直接输出属性,因此您很可能只想使用属性值。此外,由于属性没有周围的元素,您将不得不这样做
<OrderID>{$purchaseOrder[@PurchaseOrderNumber]/string()}</OrderID>
以获得您想要的结果。