4

对于给定的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>&#xF1;</root>

实际的:

<root>ñ</root>

直接使用 aXmlWriter并调用WriteRaw(text)有效,但我只能访问 a XmlDocument,并且序列化稍后发生。在XmlElement,InnerText转义&to &amp;,正如预期的那样,设置Value抛出异常。

XmlElement不管最终使用的编码如何,是否有某种方法可以将 an 的内部文本设置为转义的 ASCII 文本?我觉得我一定错过了一些明显的东西,或者这是不可能的。

4

1 回答 1

3

如果您要求 XmlWriter 生成 ASCII 输出,它应该为您提供所有非 ASCII 内容的字符引用。

var settings = new XmlWriterSettings {Encoding = Encoding.ASCII, OmitXmlDeclaration = true};

输出仍然是有效的 UTF-8,因为 ASCII 是 UTF-8 的子集。

于 2013-08-02T11:18:21.083 回答