如何使用XmlWriter将带有十进制样式实体的XML写入

时间:2015-10-29 11:45:40

标签: c# xml xmlwriter

出于兼容性原因,我想使用C#XmlWriter生成与另一个应用程序完全相同的XML。

但是我无法控制xml实体的编写方式:XmlWriter使用十六进制样式(&#x20AC),我想要十进制样式(&#8364)。

如何使用XmlWriter输出十进制样式?

示例代码

XmlWriterSettings writerSettings = new XmlWriterSettings
{
  Encoding = Encoding.GetEncoding("iso-8859-1"),
};

using (XmlWriter writer = XmlWriter.Create(stream, writerSettings))
{
  writer.WriteElementString("test", "€");
}

输出

<?xml version="1.0" encoding="iso-8859-1"?><test>&#x20AC;</test>

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

    using (XmlWriter writer = XmlWriter.Create(stream, writerSettings))
    {
        string s = AntiXssEncoder.XmlEncode("€");
        writer.WriteStartElement("test");
        writer.WriteRaw(s);
        writer.WriteEndElement();
    }

因为AntiXssEncoder使用十进制编码。您必须使用WriteRaw来执行此操作,因为XmlEncode已经对xml中的所有内容进行了编码。

不要这样做:

        string s = AntiXssEncoder.XmlEncode("€");
        writer.WriteElementString("test", s);

或者你的输出会逃脱'&amp;'字符到&amp;#8364;