【发布时间】:2015-02-25 11:48:00
【问题描述】:
是否有修复以下错误的终极解决方案:
消息 9455,第 16 层,状态 1,第 8 行
XML解析:第1行,第12个字符,非法限定名字符
在将“非法”NVARCHAR 字符串转换为 XML 时引发。
例如:
DECLARE @Text NVARCHAR(MAX)
SET @Text = '<tag>' + 'Test <' + '</tag>'
SELECT CAST(@Text AS XML)
可以使用CDATA 修复,但它只处理很少的符号。在如下查询的情况下:
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)
它什么都不做。此外,它不能用于 XML 属性值。
我试图找到一个包含所有破坏 XML 的符号的列表,但我做不到。因此,每次某些符号破坏 XML 时,我都会找到并替换它,但这是非常临时且难以维护的解决方案。
对于这种情况,是否有完整的解决方案——无论是应该在应用程序中完成还是使用 CLR 函数?
【问题讨论】:
标签: sql xml tsql sql-server-2012