使用“&”读取XML到C#XMLDocument对象

我继承了一个写得不好的Web应用程序,当它尝试读入存储在数据库中的一个“&”在里面。例如,将会有一个包含内容的标签:“Prepaid& Charge”。有没有一些秘密的简单的事情要做,它没有得到一个错误解析该字符,或者我缺少一些明显的东西?

编辑:
是否有任何其他字符会导致相同类型的解析器错误不正确形成?

问题是xml格式不正确。正确生成的xml会列出这样的数据:

Prepaid & Charge

我之前不得不解决同样的问题,我用这个正则表达式来做:

Regex badAmpersand = new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)");

结合一个定义如下的字符串常量:

const string goodAmpersand = "&";

现在你可以说badAmpersand.Replace(<你的输入> goodAmpersand);

请注意,一个简单的String.Replace(“&”,“& amp;”)不够好,因为您不能提前知道给定的文档是否有&字符将被正确编码,错误地编码,甚至两者都在同一文档中。

这里的抓取是,您必须在将其加载到解析器之前将其完成到您的xml文档,这可能意味着额外的通过它。此外,它不考虑CDATA部分内的&符号。最后,它只捕获&符号,而不是其他非法字符,如<。更新:基于注释,我还需要更新十六进制代码(& #x ...;)实体的表达式。 关于哪些字符可能引起问题,实际规则有点复杂。例如,数据中允许某些字符,但不能作为元素名称的第一个字母。而且没有简单的非法字符列表。相反,一个大(不连续)的UNICODE条纹是defined as legal,任何外面都是非法的。

所以当它归结到它时,你必须相信你的文件来源至少具有一定的合规性和一致性。例如,我发现人们通常都很聪明,可以确保标签正常工作并逃脱,即使他们不知道&是不允许的,因此今天你的问题。然而,最好的事情是把这个固定在源头上。

哦,和关于CDATA建议的一个注意事项:我会用它来确保我创建的xml是格式正确的,但是当从外部处理现有的xml时,我发现regex方法更容易。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇