Это мой xml. Моя цель состоит в том, чтобы обернуть данные внутри узла Value с помощью CDATA при экспорте, а затем импортировать обратно в столбец типа Xml с удаленным CDATA.Обтекание и удаление CDATA вокруг XML
<Custom>
<Table>Shape</Table>
<Column>CustomScreen</Column>
<Value>Data</Value>
<Custom>
Сейчас я заменить «данные» внутри узла Value с 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, даже если они, кажется, исчезли, когда я проверил столбец. Так что мне здесь не хватает? Это правильный способ сделать это?
Btw: Эта строка 'SET @ OutputXML = replace (@OutputXML, ''. –
Shnugo