【问题标题】:T-SQL XML - how to divide CDATA in xml nodeT-SQL XML - 如何在 xml 节点中划分 CDATA
【发布时间】:2013-04-18 09:18:53
【问题描述】:

我正在使用 MS SQL Server 2012 并具有以下 XML 结构:

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

在我的实际情况下,字符串长度可能会有所不同,并且我只使用整个 XML 的一部分,因此将每个 ']]>' 替换为 ']]>' 听起来并不是一个好的解决方案。有没有其他方法可以做到这一点?

【问题讨论】:

标签: xml tsql sql-server-2012 cdata


【解决方案1】:

如果你不介意第一个字符前面有逗号,你可以试试这个:

/*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 参数或值,并且当您恢复值“参数”时,您只需忽略第一个字符

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2013-07-29
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多