SQL Server:从xml解析版权符号

时间:2013-02-15 15:07:55

标签: sql-server xml tsql

我有带©个符号的xml文件。但是SQL无法解析这样的XML,有没有解决方法呢?

此查询:

declare @XmlResponse as xml; 
select @XmlResponse = '<?xml version="1.0" encoding="utf-8"?><Response>©</Response>'
select @XmlResponse as myxml

返回错误:

  

Msg 9420,Level 16,State 1,Line 15
  XML解析:第1行,第49个字符,非法xml字符

3 个答案:

答案 0 :(得分:2)

您可以将©符号替换为XML实体&#169;

declare @XmlResponse as xml; 
select @XmlResponse = REPLACE('<?xml version="1.0" encoding="utf-8"?><Response>©</Response>', '©', '&#169;')
select @XmlResponse as myxml

有关更多XML实体,请参阅: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

答案 1 :(得分:1)

如果你摆脱了编码,它就有效。 Here是我发现的关于XML编码的文章。我尝试使用它建议的编码,我得到了一个不同的错误。但是,如果我完全删除编码,它可以正常工作。

declare @XmlResponse as xml; 
select @XmlResponse = '<?xml version="1.0" ?><Response>©</Response>'
select @XmlResponse as myxml

答案 2 :(得分:1)

问题在于encoding attribute。如果您删除它或更改为utf-16,它将起作用。这是some details。关注utf-16 works here

declare @xml nvarchar(max) = 
'<?xml version="1.0" encoding="utf-16" ?><Response>©</Response>'
select convert(xml, @xml) myxml