[英]Why is Xquery giving me an error on my variable? I
I am very new to XML and XQUERY and am having a terrible time trying to validate , what is probably incredibly easy code. 我是XML和XQUERY的新手,尝试验证的时间很糟,这可能是非常简单的代码。 The validator keeps telling me that I have an unknown function or expression but seems to stop around my variable.
验证器不断告诉我我有一个未知的函数或表达式,但似乎停在我的变量周围。 Can anyone help?
有人可以帮忙吗? I'm sure this is an incredibly easy question but I have been banging my head against the wall trying to figure out what I am doing wrong.
我敢肯定,这是一个非常简单的问题,但我一直在想着自己做错了的事情。 Here is the XML:
这是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>
my Xquery: 我的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>
Expected output: 预期产量:
<Orders>
<Order>
<name>Ellen Adams</name>
<noProducts>2</noProducts>
</Order>
</Orders>
What did I do wrong? 我做错了什么? I know this is basic but I would love to learn!
我知道这是基本知识,但我很想学习! Thanks!
谢谢!
I can't speak to what you did wrong (since the error provided in the question was insufficiently precise, and when running that same query myself, I received an empty result, but also no errors), but I can provide a query that generates the output you expect. 我无法说出您做错了什么(由于问题中提供的错误不够精确,并且当我自己运行该查询时,我收到的结果为空,但也没有错误),但是我可以提供一个生成您期望的输出。
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>
Note that whereas previously $x
pointed to a purchase order, here the key is a shipping address -- important, because otherwise your $x/Name
found no data. 请注意,虽然以前
$x
指向采购订单,但是这里的键是送货地址,这一点很重要,因为否则$x/Name
找不到数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.