Wrappen und Entfernen von CDATA um XML
Das ist meine XML. Mein Ziel ist es, die Daten innerhalb des Value-Knotens beim Export mit CDATA zu umschließen und diese dann wieder in eine Spalte vom Typ Xml zu importieren, wobei CDATA entfernt wird.
<Custom>
<Table>Shape</Table>
<Column>CustomScreen</Column>
<Value>Data</Value>
<Custom>
Im Moment ersetze ich 'Daten' im Werteknoten durch das XML aus der Tabelle und setze dann CData ein, wobei ShapeInfo XML und CustomPanel der erste Knoten von [ShapeInfo] XML ist.
SET @OutputXML= replace(@OutputXML, 'Data', CAST((SELECT [ShapeInfo]
FROM [Shape] WHERE [Shape_ID] = @ShapeID) as VARCHAR(MAX))
SET @OutputXML= replace(@OutputXML, '<CustomPanel', '<![CDATA[<CustomPanel')
Aber das Ergebnis sieht ungefähr so aus, obwohl ich erwartet habe, dass es nur CDATA mit den Informationen enthält:
<Value><CustomPanel VisibilityIndicator="">&lText="No" Checked="False" Height="20" Width="50"/></Cell></Row></Table></CustomPanel></Value>
Dann mache ich einige dynamische SQL, um diese Spalte zu aktualisieren
EXEC('UPDATE ['+ @tableName + '] SET [' + @columnName + '] = ''' + @nodeValue + ''' WHERE Shape_ID = ''' + @ShapeID + '''')
Mir wurde gesagt, dass ich CDATA möglicherweise mithilfe der folgenden Methoden entfernen kann, aber ich habe es nicht verwendet.
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)') + ']]'
Nach erneuter Überprüfung der Spalte scheint diese die richtigen Informationen zu enthalten. Ich habe es jedoch nie wieder von VARCHAR in XML geändert oder die CDATA-Symbole entfernt, obwohl sie beim Überprüfen der Spalte verschwunden zu sein scheinen. Was vermisse ich hier? Ist das eine richtige Vorgehensweise?