对于给定的XmlElement
,我需要能够将内部文本设置为Unicode字符串的转义版本,尽管文档最终以UTF-8编码。有没有办法实现这个目标?
以下是代码的简单版本:
const string text = "ñ";
var document = new XmlDocument {PreserveWhitespace = true};
var root = document.CreateElement("root");
root.InnerXml = text;
document.AppendChild(root);
var settings = new XmlWriterSettings {Encoding = Encoding.UTF8, OmitXmlDeclaration = true};
using (var stream = new FileStream("out.xml", FileMode.Create))
using (var writer = XmlWriter.Create(stream, settings))
document.WriteTo(writer);
预期:
<root>ñ</root>
实际值:
<root>ñ</root>
直接使用XmlWriter
并调用WriteRaw(text)
有效,但我只能访问XmlDocument
,并且稍后会进行序列化。在XmlElement
上,InnerText
按预期将&
转移到&
,并设置Value
会引发异常。
是否有某种方法可以将XmlElement
的内部文本设置为转义的ASCII文本,而不管最终使用的编码是什么?我觉得我必须遗漏一些明显的东西,或者说这是不可能的。
答案 0 :(得分:3)
如果您要求XmlWriter生成ASCII输出,它应该为您提供所有非ASCII内容的字符引用。
var settings = new XmlWriterSettings {Encoding = Encoding.ASCII, OmitXmlDeclaration = true};
输出仍然是有效的UTF-8,因为ASCII是UTF-8的子集。