2012-07-10 65 views
0

我想列出具有總訂單數量的各個Year。使用字符串連接的XQuery,其中一個參數是字符串,另一個是數字

<Samples> 
    <Sample> 
    <Year>2010</Year> 
    <Order>20,000</Order> 
    </Sample> 
    <Sample> 
    <Year>2011</Year> 
    <Order>20,000</Order> 
    <Order>35,000</Order> 
    </Sample> 
    <Sample> 
    <Year>2012</Year> 
    <Order>20,000</Order> 
    <Order>23,000</Order> 
    <Order>40,000</Order> 
    </Sample> 
</Samples> 

我期待輸出 -

Year  Orders 
2010  1 
2011  2 
2012  3 

由於<Order>元素的數量本身會告訴我的訂單總數,我試圖在BaseX以下 -

for $x in doc("Sample")/Samples/Sample 
    return <li>{string-join (($x/Year, count($x/Order)) , " # ")}</li> 

但是我得到一個錯誤,因爲我在string-join函數中使用整數而不是字符串。或者有沒有其他方法可以獲得相同的輸出?

回答

1

string-join需要字符串,而不是count返回的數字。添加一個演員,它會運行。

for $x in /Samples/Sample 
    return <li>{ string-join(($x/Year, xs:string(count($x/Order))), " # ") }</li> 

我固定的兩個錯誤:

  • 你爲什麼在一年查詢屬性Y?空無一人。
  • 你需要計數<Order>標籤,而不是<Orders>

也許使用concat可以使代碼更具可讀性(只要你只使用兩個參數)?

+0

非常感謝。我糾正了錯誤。再次感謝:) – John 2012-07-10 08:39:18

相關問題