簡體   English   中英

為什么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找不到數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM