Обертывание и удаление CDATA вокруг XML
Это мой xml. Моя цель - обернуть данные в узле Value с помощью CDATA при экспорте, а затем импортировать их обратно в столбец типа XML с удаленным CDATA.
<Custom>
<Table>Shape</Table>
<Column>CustomScreen</Column>
<Value>Data</Value>
<Custom>
Прямо сейчас я заменяю «Данные» внутри узла «Значение» на XML из таблицы, а затем полагаю, что я помещаю вокруг него 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)') + ']]'
После проверки столбца снова кажется, что он содержит правильную информацию. Однако я никогда не изменял его обратно на XML из VARCHAR и не удалял символы CDATA, хотя они, кажется, исчезли, когда я проверял столбец. Так чего мне здесь не хватает? Это правильный способ сделать это?