2016-11-10 38 views
4

這是我發佈的問題的一個副本here 我只需要注意到這發生在teiid引擎的XMLTABLE中。我解析以下XML內容:使用xpath加入屬性與節點值的多個連接在Teiid

<AttributeSets> 
    <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> 
</AttributeSets> 

使用

Select * From 
     XMLTABLE(XMLNAMESPACES(DEFAULT 'http://ns1', 
      'http://ns2/default.xsd' as ns2), 
      'AttributeSets/ns2:ItemAttributes' PASSING x.AttributeSets 
     COLUMNS 
      Creator STRING PATH 'string-join(//ns2:Creator/(@Role, node()) , '', '')' 
    ) p; 

這裏x.AttributeSets是從上面的內容的XML類型的變量。

我想格式化並將其組合成一行使用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 

最終輸出我能得到的最是:

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

這所有角色和創作者用逗號分隔成一行。出於某種原因,concat運算符似乎沒有用。 請你幫忙。

回答

1

嘗試下面的XPath

string-join(for $n in /AttributeSets/ItemAttributes/Creator return concat($n/@Role, ':',$n/text()),',') 

記住的內調整選擇的XPath按你的源代碼樹的上下文。我以爲文檔根目錄因此

/AttributeSets/ItemAttributes/Creator 

的說明文件字符串連接在W3C功能有相當類似的例子。

更新:

我想,我是接近的地方,因爲這...作品,給我一個逗號分隔的角色列表:基於role1,role2所,Role3

認爲你非常接近。我嘗試了小調整到和這工作:

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

出於某種原因,毗連運算似乎沒有工作。

不確定,我用在線xpath測試儀here檢查,它的工作原理完美。 Infact這個在線工具接受你的xap以及以下輸出:

Creator OneRole1, Creator TwoRole2, Creator ThreeRole3 
+0

謝謝!兩個版本都可以順利地按照需要工作! –

相關問題