2
我現在有類似以下內容的SQL語句(我已經刪除了一些複雜性):爲什麼我無法使用FOR XML EXPLICIT作爲Type時創建CDATA?
SELECT
Name as '@name'
,(
SELECT foo.Name as '@name', foo.Key as '@key'
FROM foo
FOR XML Path('foo'), root ('foos'), type
)
,(
SELECT
1 as Tag
,null as Parent
,bar.Name as 'bar!1!name'
,bar.Key as 'bar!1!key'
,bar.Content as 'bar!1!!cdata'
FROM bar
FOR XML EXPLICIT, root ('bars'), type
)
FROM baz
FOR XML Path('baz'), root ('bazzes')
此查詢的結果是一個很好的XML值如下所示:
<bazzes>
<baz name="">
<foos>
<foo name="" key="">
</foo>
</foos>
<bars>
<bar name="" key="">
<content>the content</content>
</bar>
</bars>
</baz>
</bazzes>
請注意,content
元素沒有按預期的那樣具有CDATA標記,我知道這是因爲我已將其指定爲type
。
但是當我刪除的類型,其全部內容元素得到的編碼變成:
<bazzes>
<baz name="">
<foos>
<foo name="" key="">
</foo>
</foos>
<bars>
<bar name="" key="">
<content> etc.
</bar>
</bars>
</baz>
</bazzes>
我如何才能讓查詢的結果是有效的XML值,並移除類型參數,所以我得到的CDATA標記正確成爲:
<bazzes>
<baz name="">
<foos>
<foo name="" key="">
</foo>
</foos>
<bars>
<bar name="" key="">
<content><![CDATA[the content]]></content>
</bar>
</bars>
</baz>
</bazzes>
謝謝你,我發現sqlserver對數據進行編碼並刪除了cdata標記,這實際上可以滿足我的需求,所以危機避免了! – shenku