【问题标题】:How do write XML with decimal style entities with XmlWriter如何使用 XmlWriter 编写带有十进制样式实体的 XML
【发布时间】:2015-10-29 11:45:40
【问题描述】:

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

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

如何使用 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>

【问题讨论】:

  • 其他应用程序写入的 XML 使用什么编码?
  • 编码是iso-8859-1
  • 但你是说另一个应用程序将输出写为&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;&lt;test&gt;&amp;#8364;&lt;/test&gt;?
  • 有趣的问题:“正常”的变音符号使用 iso-8859-1 编码并且不转换为 XML 实体

标签: c# xml xmlwriter


【解决方案1】:

你可以试试这个:

    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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2014-04-11
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多