2016-11-10 36 views
1

我有以下XML內容:加入與節點值的屬性的多個級聯使用XPath

<ns2:ItemAttributes xml:lang="de-DE"> 
    <ns2:Creator Role="Role1">Creator One</ns2:Creator> 
    <ns2:Creator Role="Role2">Creator Two</ns2:Creator> 
    <ns2:Creator Role="Role3">Creator Three</ns2:Creator> 
</ns2:ItemAttributes> 

我試圖格式化和使用XPath結合這成一行。 喜歡的東西:

string-join(//ns2:Creator/concat(./text(), @Role), ', ') 

我想,我是接近的地方,因爲這個:

string-join(//ns2:Creator/@Role , ', ') 

的作品,給我一個逗號分隔的角色列表:基於role1,role2所,Role3

string-join(//ns2:Creator/node(), ', ') 

結合創作者的值:「創建者之一,創建者Ť我,造物主三「。

我想的

Role1: Creator One, Role2: Creator Two, Role3: Creator Three 

最終輸出可否請你幫忙。

+0

使用下面的代碼更加接近:string-join(// ns2:Creator /(@ Role,node()),',') 現在我擁有所有的值,但不是那麼漂亮 - 它們都是逗號 - 分離 –

回答

0

您需要選擇@Role作爲第一個參數,以您的來電concat(),並使用.選擇上下文節點的字符串值:

string-join($xml//ns2:Creator/concat(@Role, ': ', .), ', ') 

相反的.你也可以使用string()string(.)這做明確的,否則將發生隱式轉換:

string-join($xml//ns2:Creator/concat(@Role, ': ', string(.)), ', ') 

返回:

Role1: Creator One, Role2: Creator Two, Role3: Creator Three 
+0

謝謝,但由於某種原因,在這種情況下,我沒有得到價值。輸出成爲:「:,:」 因此,它捕獲了兩個項目,冒號與空白,但沒有獲得值 –

+0

@EugeneBykov然後我懷疑你已經改變了一些關於查詢或數據,因爲我測試了這個在你提供的相同數據中你的問題和輸出是正確的。 – wst

+0

這是在teiid sql中,可能是這個問題... concat處理例如... –

相關問題