gpt4 book ai didi

sql - 修复 XML 解析的技术 : illegal qualified name character

转载 作者:行者123 更新时间:2023-12-05 02:22:48 25 4
gpt4 key购买 nike

是否有解决以下错误的最终解决方案:

Msg 9455, Level 16, State 1, Line 8
XML parsing: line 1, character 12, illegal qualified name character

将“非法”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 函数来完成?

最佳答案

这取决于 XML 版本,但为了安全起见,您可以做的一件事是循环替换所有 C0 控制 ASCII 字符:

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)

关于 XML 字符集的更多信息:

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

关于sql - 修复 XML 解析的技术 : illegal qualified name character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com