寻求0x0B

时间:2009-11-16 19:31:49

标签: sql-server-2005 debugging xml-serialization

从SQL列读取一些数据然后将其转换为XML时出现此错误:

“System.InvalidOperationException:XML文档中存在错误(182,16).---> System.Xml.XmlException:'',十六进制值0x0B,是无效字符。”

很公平,也许数据格式不正确。除了,我怎样才能找到罪魁祸首?

SELECT * from Mytable where Column like '%' + char(0x0B)+'%' 

返回空。

(显然我尝试了所有%+ char,char,char +%组合,以防万一)

3 个答案:

答案 0 :(得分:5)

终于找到了它!

.NET XML序列化程序在序列化时会转义无效字符,但在反序列化之前它是取消转义。

所以我必须搜索转义& #xB才能找到未转义的0x0B ...真的不好笑!

所以这个:

  SELECT * from Mytable where Column like '%' + '&#xB' + '%'

实际上会找到这个:

<?xml version="1.0"?>
      <Hashtable><key>313_other_10</key><value>&#xB</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不能在X​​ML文档中使用(请参阅有效XML字符列表here。)请考虑将这样的无效XML字符迁移到有效的XML(例如序列{{1} })。