从SQL列读取一些数据然后将其转换为XML时出现此错误:
“System.InvalidOperationException:XML文档中存在错误(182,16).---> System.Xml.XmlException:'',十六进制值0x0B,是无效字符。”
很公平,也许数据格式不正确。除了,我怎样才能找到罪魁祸首?
SELECT * from Mytable where Column like '%' + char(0x0B)+'%'
返回空。
(显然我尝试了所有%+ char,char,char +%组合,以防万一)
答案 0 :(得分:5)
终于找到了它!
.NET XML序列化程序在序列化时会转义无效字符,但在反序列化之前它是取消转义。
所以我必须搜索转义& #xB才能找到未转义的0x0B ...真的不好笑!
所以这个:
SELECT * from Mytable where Column like '%' + '' + '%'
实际上会找到这个:
<?xml version="1.0"?>
<Hashtable><key>313_other_10</key><value></value></Hashtable>
虽然这看起来像有效的XML,但在以下情况下会抛出无效的字符异常:
XmlSerializer xs = new XmlSerializer(Type.GetType(Hashtable));
StringReader stringReader = new StringReader(xml);
obj = xs.Deserialize(stringReader);
非常感谢那些积极参与帮助的人!这是无价的帮助!
答案 1 :(得分:3)
您是否尝试过nchar(0x0B)
而不是char(0x0B)
?听起来你的狡猾角色是Unicode。
答案 2 :(得分:0)
字符0x0B
不能在XML文档中使用(请参阅有效XML字符列表here。)请考虑将这样的无效XML字符迁移到有效的XML(例如序列{{1} })。