我有带©
个符号的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字符
答案 0 :(得分:2)
您可以将©
符号替换为XML实体©
。
declare @XmlResponse as xml;
select @XmlResponse = REPLACE('<?xml version="1.0" encoding="utf-8"?><Response>©</Response>', '©', '©')
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