Technique for fixing XML parsing: illegal qualified name character
It would depend on the XML version but to be on the safer side, one thing you can do is replace all the C0 control ASCII characters in a loop:
DECLARE @counter INT=0
DECLARE @Text NVARCHAR(MAX)
SET @Text = '<tag><![CDATA[' + 'Test' + CHAR(28) + CHAR(55) + CHAR(29) + '<' + ']]></tag>' -- CHAR(28) --CHAR(8) -- CHAR(29) -- CHAR(63)
WHILE @counter<32
BEGIN
SET @text= REPLACE(@text,CHAR(@counter),'?')
SET @counter=@counter+1
END
SELECT CAST(@Text AS XML)
more info about XML char set:
http://www.w3.org/TR/xml11/#charsets
http://en.wikipedia.org/wiki/Valid_characters_in_XML
http://en.wikipedia.org/wiki/C0_and_C1_control_codes
gotqn
Free Tibet From China Domination http://freetibet.org/about/10-facts-about-tibet
Updated on June 04, 2022Comments
-
gotqn about 2 years
Is there a ultimate solution for fixing the following error:
Msg 9455, Level 16, State 1, Line 8
XML parsing: line 1, character 12, illegal qualified name characterwhich is raised when converting "illegal"
NVARCHAR
string toXML
.For example:
DECLARE @Text NVARCHAR(MAX) SET @Text = '<tag>' + 'Test <' + '</tag>' SELECT CAST(@Text AS XML)
Can be fixed using
CDATA
but it is handling few symbols only. In situations like the query below:DECLARE @Text NVARCHAR(MAX) SET @Text = '<tag><![CDATA[' + 'Test' + CHAR(28) + ']]></tag>' -- CHAR(28) --CHAR(8) -- CHAR(29) -- CHAR(63) SELECT CAST(@Text AS XML)
it does nothing. Also, it cannot be used in the XML attribute value.
I have try to find a list with all symbols that are breaking XML but I was not able to do. So each time some symbol breaks the XML I am finding it and replacing it, but this is very temporary and hard to maintain solution.
Is there a complete solution for such cases - no matter if it should be done in the application or using CLR function?