これは私のXMLです。私の目標は、エクスポートのCDATAをValueノード内のデータにラップし、それをCDATAを削除したXml型の列にインポートすることです。XMLの周りにCDATAを折り返して取り除く
ShapeInfoは、XML型であるとCustomPanelは[ShapeInfoの最初のノードである今、私はテーブルからXMLで値ノード内の「データ」を交換していますし、私は私がその周りのCDataを入れています信じて<Custom>
<Table>Shape</Table>
<Column>CustomScreen</Column>
<Value>Data</Value>
<Custom>
、 ] XML。
<Value><CustomPanel VisibilityIndicator="">&lText="No" Checked="False" Height="20" Width="50"/></Cell></Row></Table></CustomPanel></Value>
を、私はその列
EXEC('UPDATE ['+ @tableName + '] SET [' + @columnName + '] = ''' + @nodeValue + ''' WHERE Shape_ID = ''' + @ShapeID + '''')
に更新するために、いくつかの動的SQLをやっている:結果は情報のみの周りにCDATAを持って、私はそれを期待していても、このようになりますしかし
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を削除するために以下を使用できるかもしれないと言われましたが、私はそれを使用しませんでした。
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シンボルを削除したことはありません。では、私はここで何が欠けていますか?これは正しい方法ですか?あなたがXMLを生成を完全に制御する必要がある場合は
Btw:この行 'SET @ OutputXML = replace(@OutputXML、 '
Shnugo