2013-04-18 76 views
2

我使用MS SQL Server 2012中,並具有以下XML結構:T-SQL XML - 如何在XML節點劃分CDATA

<value name="parameter"> 
    <![CDATA[__na__]]> 
    <![CDATA[1]]> 
    <![CDATA[2]]> 
    <![CDATA[3]]> 
    <![CDATA[12]]> 
</value> 

,並保存在數據庫中NVARCHAR字符串(MAX)數據類型字段。

當我投這個值,如下所示:

CAST(ColumnValue AS XML) 

我得到以下XML結構:

<value name="parameter">__na__12312</value> 

有沒有辦法到CDATA用逗號爲〔實施例劃分,並得到以下結構:

<value name="parameter">__na__,1,2,3,12</value> 

在我的真實情況下,字符串長度可以變化,我只使用wh的一部分ole XML,因此用']]>替換每個']]>'聽起來不是很好的解決方案。有沒有其他方法可以做到這一點?

+0

相關[Sql Server 2005 Xml數據類型在CD上刪除了CDATA](http:// st ackoverflow.com/questions/735646)和類似的數據 - 只要數據處於'xml'類型,'CDATA'信息就會丟失。 – AakashM

+1

定義:CDATA用於包裝不應該由XML解析器解析的文本數據,因此需要額外的控制來規避這種情況。對於MS-SQL 2012,看看這個答案是否支持你的努力:http://stackoverflow.com/questions/1429351/sql-server-xml-output-with-cdata它提供了關於控制FOR XML EXPLICIT的信息。有點偏離主題,但這是關於CAST()和CONVERT()之間XML數據區別的一篇很好的文章,https://www.simple-talk.com/sql/database-administration/converting-string-data-到XML和 - XML到字符串數據/ – Newbyman

回答

0

如果你不介意有一個precedding的第一個字符的逗號,你可以試試這個:

/*Loading test data*/ 
declare @xml varchar(8000) 
set @xml = ' 
<value name="parameter"> 
    <![CDATA[__na__]]> 
    <![CDATA[1]]> 
    <![CDATA[2]]> 
    <![CDATA[3]]> 
    <![CDATA[12]]> 
</value>' 

/*the replace*/ 
set @xml= REPLACE(@xml,'<![CDATA[','<![CDATA[,') 
select CAST(@xml AS XML) 

這將導致:

<value name="parameter">,__na__ ,1 ,2 ,3 ,12 </value> 

這種替代確保你只改變CDATA的和而不是其他xml參數或值,並且當您恢復值「參數」時,您只需要忽略第一個字符