2015-04-22 58 views
1

我需要在以下格式如何檢索XML包含CDATA,從數據庫

<mv> 
    <v>!CDATA[[some_inner_xml_1]]</v> 
    <v>!CDATA[[some_inner_xml_2]]</v> 
</mv> 

我剛剛獲悉,在<v />數據會出現一些其他的XML檢索XML。當我以爲數據將是一個整數,我寫了這一點,它的工作

select IdentifierText as 'v' from ipmruntime.RecordsToExport where BatchID = 5 for xml path(''), Root('mv') 

我試圖用語法'v!cdata' - 它不喜歡它。我不知道在哪裏可以在它

我嘗試另一種語法

SELECT 
    1 AS Tag, 
    null AS Parent, 
    IdentifierText as 'mv!1!v!cdata' 
FROM ipmruntime.RecordsToExport 
where BatchID = 5 
FOR XML EXPLICIT, root('mv') 

這導致幾乎什麼,我需要

<mv><mv><v><![CDATA[47f81be4-b54f-4703-840b-62b306c40842]]></v></mv><mv><v><![CDATA[3ba36a1f-bf75-4ed9-911e-26f10fba5587]]></v></mv></mv> 

或者,如果我在同一個查詢中使用'v!1'堅持CDATA ,它會給我<mv><v></v><v></v></mv>但哪裏比CDATA?

但是這有每個<v>包裝成<mv>。很顯然,我不是偉大的XML/SqlServer的組合...

回答

2

你可以這樣說:

select 
    1 as Tag, 
    null as Parent, 
    IdentifierText as [v!1!!CDATA] --[tag name!tag type!tag attribute!other optional setting] 
from ipmruntime.RecordsToExport  
where BatchID = 5 
for xml explicit, root('mv') 
+0

謝謝。我研究了'!! cdata'語法。它把CDATA放入'''''''。它是否正確? –

+0

我只是跑這個測試 - 'SELECT MultiVal = TypeNode.value('(。)[1]','varchar(max)') FROM @ XML.nodes('/ mv/v')AS XTbl TypeNode)' - 它似乎與'<>'一起工作。請確認 –

+0

@ T.S。語法是:''TAGNAME!TAGID!ATTRIBUTENAME [!..]''在這種情況下,我們沒有爲''標籤賦予任何屬性,這就是爲什麼我們有'TAGNAME!TAGID![!CDATA]'(方括號表示可選屬性,應該在實際查詢中刪除) – har07