views:

11

answers:

0

I'm working on a system that takes relational data from a sql server DB and uses SSIS to produce an XML extract using sql server 2005's 'FOR XML PATH' command and a schema. The problem lies with replacing the XML reserved characters.

'FOR XML PATH' is only replacing <, >, and &, not ' and ", so I need a way of replacing these myself. I've tried pre-processing the fields in the database to replace XML reserved characters with their entitised equivalents (e.g. & becomes &amp;), but once these fields are used to construct XML using FOR XML the leading & is replaced with &amp;, so I end up with &amp;amp; where I should have &amp;.

What I've tried so far is altering the element's contents after the XML has been constructed using XQuery inside SQL server like so:

DECLARE @data VARCHAR(MAX)

SET @data = CONVERT(VARCHAR(MAX), [my xml column].query(' data(/root/node_i_want)')
SELECT @data = [function to replace quotes etc](@data)
SET [my xml column].modify('replace value of (/root/node_i_want)[1] with sql:variable("@data")')

but I get the same problem.

Essentially, is there something wrong I'm doing with the above, or a way to tell FOR XML to entitise other characters, or something like that? Basically anything short of having to write a program to change the XML after it has been assembled in large batches and saved to files!