c# – 如何在不转义字符的情况下保存XML?

在我的C#app中,
XML数据可能包含已经预处理的任意元素文本,因此(除其他外)非法字符已转换为其转义(xml字符实体编码)形式.

示例:< myElement>此&该< / myElement>已被转换为< myElement>这个& amp;该< / myElement取代.

问题是,当我使用XmlTextWriter保存文件时,’&’正在重新转发到< myElement>这个& amp; amp;该< / myElement取代.我不想要额外的& amp; amp;在字符串中.

另一个例子:< myElement>•bullet< / myElement>,我的处理将其更改为< myElement>&#8226;子弹< / myElement>保存到< myElement>& amp;#8226;子弹< / myElement取代.我希望输出到文件的是< myElement>&#8226;子弹< / myElement>形成.

我已经尝试了各种XmlWriters等的各种选项,但似乎无法获得原始字符串以正确输出.为什么XML解析器无法识别&不重写已经有效的逃脱?

更新:更多的调试,我发现元素文本字符串(实际上所有字符串包括元素标签,名称,属性等)只要被内部类复制到.net xml对象数据(CDATA是一个例外)就会被编码在System.Xml下调用XmlCharType.所以这个问题与XmlWriters无关.看起来解决问题的最佳方法是在输出数据时取消数据,方法是:

string output = System.Net.WebUtility.HtmlDecode(xmlDoc.OuterXml);

哪个可能会演变成自定义XmlWriter以保留格式等.

感谢所有有用的建议.

最佳答案 而是调用xmlwriter.writeraw.但要检查字符是否有效是不够智能的.因此,您必须自己检查否则将生成无效的xml.

点赞