为什么 Xquery 在我的变量上给我一个错误?我
Why is Xquery giving me an error on my variable? I
我是 XML 和 XQUERY 的新手,我在尝试验证时遇到了麻烦,这可能是非常简单的代码。验证器一直告诉我我有一个未知的函数或表达式,但似乎停在我的变量周围。谁能帮忙?我敢肯定这是一个非常简单的问题,但我一直在用头撞墙试图弄清楚我做错了什么。这是 XML:
<PurchaseOrders>
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
<Address Type="Shipping">
<Name>Ellen Adams</Name>
</Address>
<Address Type="Billing">
<Name>Tai Yee</Name>
</Address>
<Items>
<Item PartNumber="872-AA">
<ProductName>Lawnmower</ProductName>
</Item>
<Item PartNumber="926-AA">
<ProductName>Baby Monitor</ProductName>
</Item>
</Items>
</PurchaseOrder>
</PurchaseOrders>
我的 Xquery:
for $x in doc/PurchaseOrders/PurchaseOrder
let $z := $x/Items/Item
let$n := count($z)
where $x/Address[@Type = 'Shipping'] order by $x/Name ascending
return <Orders><Order><Name>{$x/Name}</Name><NoProducts>$n</NoProducts></Order></Orders>
预期输出:
<Orders>
<Order>
<name>Ellen Adams</name>
<noProducts>2</noProducts>
</Order>
</Orders>
我做错了什么?我知道这是基本的,但我很想学习!谢谢!
我不能说你做错了什么(因为问题中提供的错误不够准确,当我自己运行同样的查询时,我收到了一个空结果,但也没有错误) ,但我可以提供生成您期望的输出的查询。
declare context item := document {
<PurchaseOrders>
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
<Address Type="Shipping">
<Name>Ellen Adams</Name>
</Address>
<Address Type="Billing">
<Name>Tai Yee</Name>
</Address>
<Items>
<Item PartNumber="872-AA">
<ProductName>Lawnmower</ProductName>
</Item>
<Item PartNumber="926-AA">
<ProductName>Baby Monitor</ProductName>
</Item>
</Items>
</PurchaseOrder>
</PurchaseOrders>
};
<Orders>{
for $purchaseOrder in /PurchaseOrders/PurchaseOrder[Address/@Type='Shipping']
let $shippingAddress := $purchaseOrder/Address[@Type='Shipping']
let $items := $purchaseOrder/Items/Item
let $itemCount := count($items)
order by $shippingAddress/Name ascending
return <Order>
<Name>{$shippingAddress/Name}</Name>
<PONum>{string($purchaseOrder/@PurchaseOrderNumber)}</PONum>
<NoProducts>{$itemCount}</NoProducts>
</Order>
}</Orders>
请注意,虽然之前 $x
指向采购订单,但此处的键是送货地址 -- 很重要,否则您的 $x/Name
找不到任何数据。
我是 XML 和 XQUERY 的新手,我在尝试验证时遇到了麻烦,这可能是非常简单的代码。验证器一直告诉我我有一个未知的函数或表达式,但似乎停在我的变量周围。谁能帮忙?我敢肯定这是一个非常简单的问题,但我一直在用头撞墙试图弄清楚我做错了什么。这是 XML:
<PurchaseOrders>
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
<Address Type="Shipping">
<Name>Ellen Adams</Name>
</Address>
<Address Type="Billing">
<Name>Tai Yee</Name>
</Address>
<Items>
<Item PartNumber="872-AA">
<ProductName>Lawnmower</ProductName>
</Item>
<Item PartNumber="926-AA">
<ProductName>Baby Monitor</ProductName>
</Item>
</Items>
</PurchaseOrder>
</PurchaseOrders>
我的 Xquery:
for $x in doc/PurchaseOrders/PurchaseOrder
let $z := $x/Items/Item
let$n := count($z)
where $x/Address[@Type = 'Shipping'] order by $x/Name ascending
return <Orders><Order><Name>{$x/Name}</Name><NoProducts>$n</NoProducts></Order></Orders>
预期输出:
<Orders>
<Order>
<name>Ellen Adams</name>
<noProducts>2</noProducts>
</Order>
</Orders>
我做错了什么?我知道这是基本的,但我很想学习!谢谢!
我不能说你做错了什么(因为问题中提供的错误不够准确,当我自己运行同样的查询时,我收到了一个空结果,但也没有错误) ,但我可以提供生成您期望的输出的查询。
declare context item := document {
<PurchaseOrders>
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
<Address Type="Shipping">
<Name>Ellen Adams</Name>
</Address>
<Address Type="Billing">
<Name>Tai Yee</Name>
</Address>
<Items>
<Item PartNumber="872-AA">
<ProductName>Lawnmower</ProductName>
</Item>
<Item PartNumber="926-AA">
<ProductName>Baby Monitor</ProductName>
</Item>
</Items>
</PurchaseOrder>
</PurchaseOrders>
};
<Orders>{
for $purchaseOrder in /PurchaseOrders/PurchaseOrder[Address/@Type='Shipping']
let $shippingAddress := $purchaseOrder/Address[@Type='Shipping']
let $items := $purchaseOrder/Items/Item
let $itemCount := count($items)
order by $shippingAddress/Name ascending
return <Order>
<Name>{$shippingAddress/Name}</Name>
<PONum>{string($purchaseOrder/@PurchaseOrderNumber)}</PONum>
<NoProducts>{$itemCount}</NoProducts>
</Order>
}</Orders>
请注意,虽然之前 $x
指向采购订单,但此处的键是送货地址 -- 很重要,否则您的 $x/Name
找不到任何数据。