2013-07-13 42 views
0

我有描述內容的雜誌的XQuery - CONCAT具有相同的第一個值

<magazine> 
<issue.number>22</issue.number> 
<article> 
<title>first article</title> 
<subject>James</James> 
</article> 
<article> 
<title>second article</title> 
<subject>James</subject> 
</article> 
</magazine> 

文件的集合,我要輸出的物品的<issue.number>, <title>的格式列表。

所以我創建了一個XQuery:

for $x in /magazine 
return concat($x/issue.number/text(),',',$x//title/text()) 

這將導致一個錯誤,我想是因爲被退回兩次<issue.number>值造成的。中不存在DB我得到這個:

實際的基數爲參數1函數的簽名聲明的基數不匹配:CONCAT($霧化值作爲XDT:anyAtomicType,......)的xs:字符串? 。預期的基數:零或一,得到2.

所以,如果我不能使用concat()我可以使用什麼?

+0

發佈之前,請先看看預覽,HTML元素需要被轉義爲獲得印碼。我也修復了一些小的語法錯誤('For'和一個缺少的變量名),請確保複製 - 粘貼代碼,不要再次輸入以防止出現此類錯誤。 –

+1

感謝Jens,我看到了您的修改,並訪問了您的個人資料頁面,但沒有看到消息或「感謝」設施。我很感激。 – Jack

回答

2

問題是該雜誌元素中有兩篇文章,所以您傳遞了兩個值作爲第三個參數concat(...)。此外,您不需要在此處使用text()(並且在大多數情況下不應該)。

一次在雜誌上循環,然後在文章上再次循環。只循環播放文章也很好,但是您必須使用我更喜歡避免的父軸。

for $magazine in $xml/magazine 
for $article in $magazine/article 
return concat($magazine/issue.number, ',', $article//title) 

22,第一篇文章
22,第二製品


對於級聯超過串的序列,看看string-join($sequence, $seperator)。一個例子就是如果你想要一個問題的所有標題連續。

for $magazine in $xml/magazine 
return concat($magazine/issue.number, ': ', string-join($magazine//title, ', ')) 

這將返回

22:第一條,第二條

+0

感謝那個延斯,那是真的。 – Jack

相關問題