2017-05-30 58 views
0

我想用逗號分隔符使用xsl來獲取子節點的內部文本。獲取子節點的內部文本並將其存儲在由分隔符分隔的字符串中

我們不能在代碼中指定子節點元素..它可能是任何東西。

例如:

< AFF ID = 「東盟自由貿易區」 > <組織> <ORGNAME> < nameelt 應用>化學系</nameelt > < nameelt的 城市環境科學>研究生院,東京都大學 大學</nameelt > </ORGNAME > < /組織> <地址> <addrelt> Minamiohsawa, 八王子</addrelt > <城市>東京 192-0397 < /城市> <國家>日本< /國家> < /地址> <電子郵件> hulie @ au.ac.jp < /電子郵件> </aff >

我的代碼,

SELECT 
REPLACE(Element.value('(.)[1]','NVARCHAR(MAX)'), CHAR(10), '') AS address 
FROM @xml.nodes('aff') Datalist (Element); 

預期輸出:

應用化學,城市 環境科學研究生院,東京都立大學,Minamiohsawa, 八王子市,東京192-0397系。 ..就這樣

回答

0

請試試這個:

DECLARE @xml XML= 
N'<aff id="affa"> 
    <org> 
    <orgname> 
     <nameelt>Department of Applied Chemistry</nameelt> 
     <nameelt>Graduate School of Urban Environmental Sciences, Tokyo Metropolitan University</nameelt> 
    </orgname> 
    </org> 
    <address> 
    <addrelt>Minamiohsawa, Hachioji</addrelt> 
    <city>Tokyo 192-0397</city> 
    <country>Japan</country> 
    </address> 
    <email>[email protected]</email> 
</aff>'; 

- 查詢使用.nodes()來獲取所有<nameelt> -elements。通過使用FOR XML PATH('')將結果返回爲一個長逗號分隔的字符串,STUFF將最終切斷前導逗號:

SELECT STUFF(
(
    SELECT ', ' + n.value(N'text()[1]','nvarchar(max)') 
    FROM @xml.nodes(N'/aff/org/orgname/nameelt') AS A(n) 
    FOR XML PATH(''),TYPE 
).value(N'text()[1]','nvarchar(max)'),1,2,''); 
相關問題