编程语言
首页 > 编程语言> > c# – 如何在不转义字符的情况下保存XML?

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

作者:互联网

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

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

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

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

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

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

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

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

感谢所有有用的建议.

解决方法:

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

标签:c,encode,xmlwriter
来源: https://codeday.me/bug/20190704/1377319.html