【发布时间】:2016-12-26 01:57:59
【问题描述】:
这是我的xml。我的目标是在导出时使用 CDATA 将数据包装在 Value 节点内,然后将其导入回删除 CDATA 的 Xml 类型列。
<Custom>
<Table>Shape</Table>
<Column>CustomScreen</Column>
<Value>Data</Value>
<Custom>
现在我正在用表中的 XML 替换 Value 节点内的“数据”,然后我相信我将 CData 放在它周围,其中 ShapeInfo 是 XML 类型,而 CustomPanel 是 [ShapeInfo] XML 的第一个节点。
SET @OutputXML= replace(@OutputXML, 'Data', CAST((SELECT [ShapeInfo]
FROM [Shape] WHERE [Shape_ID] = @ShapeID) as VARCHAR(MAX))
SET @OutputXML= replace(@OutputXML, '<CustomPanel', '<![CDATA[<CustomPanel')
但结果看起来像这样,即使我希望它只有 CDATA 围绕信息:
<Value><CustomPanel VisibilityIndicator="">&lText="No" Checked="False" Height="20" Width="50"/></Cell></Row></Table></CustomPanel></Value>
然后我正在做一些动态 sql 来更新该列
EXEC('UPDATE ['+ @tableName + '] SET [' + @columnName + '] = ''' + @nodeValue + ''' WHERE Shape_ID = ''' + @ShapeID + '''')
有人告诉我也许可以使用以下方法删除 CDATA,但我没有使用它。
declare @x xml
set @x=N'<Value><CustomPanel....... all the current info ...=""></Value>'
select @x.value('(/Value)[1]', 'nvarchar(max)')
select '<![CDATA[' + @x.value('(/Value)[1]', 'nvarchar(max)') + ']]'
再次检查该列后,它似乎包含正确的信息。但是,我从未将其从 VARCHAR 更改回 XML 或删除 CDATA 符号,即使当我检查该列时它们似乎已消失。那么我在这里错过了什么?这是正确的做法吗?
【问题讨论】:
-
顺便说一句:这一行
SET @OutputXML= replace(@OutputXML, '<CustomPanel', '<![CDATA[<CustomPanel')不会添加结束]]>。
标签: sql sql-server xml cdata