.net – 十六进制值0x00是无效字符
我正在从一个StringBuilder生成一个
XML文档,基本类似于:
string.Format("<text><row>{0}</row><col>{1}</col><textHeight>{2}</textHeight><textWidth>{3}</textWidth><data>{4}</data><rotation>{5}</rotation></text> 后来,像: XmlDocument document = new XmlDocument(); document.LoadXml(xml); XmlNodeList labelSetNodes = document.GetElementsByTagName("labels"); for (int index = 0; index < labelSetNodes.Count; index++) { //do something } 所有数据都来自数据库.
但它不一致. 在数据库中,数据始终为空白字符串.它永远不是’null’ sql server的版本可能有所不同(2008年将会失败,2005将会起作用)和排序规则. 但完全相同的代码和数据有时会失败.任何想法的问题在哪里? 解决方法没有您的实际数据或来源,我们很难诊断发生了什么.但是,我可以提出几点建议:> Unicode NUL(0x00)在所有版本的XML中是非法的,并且验证解析器必须拒绝包含它的输入. 鉴于您写的内容,我怀疑将数据库数据转换成XML的任何数据都被破坏;它传播非XML字符. 创建一些具有非XML字符(NUL,DEL,控制字符等)的数据库条目,并在其上运行XML转换器.将XML输出到文件,并在十六进制编辑器中查看.如果它包含非XML字符,则转换器将被破坏.修复它,或者如果不能,创建一个使用这样的字符拒绝输出的预处理器. 如果转换器输出看起来不错,则问题在于您的XML消费者;它在某处插入非XML字符.您将不得不将您的消费过程分解为单独的步骤,检查每个步骤的输出,并缩小引入不良字符的内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |