【问题标题】:C# How to write xml declaration encoding value in uppercase?C#如何以大写形式编写xml声明编码值?
【发布时间】:2018-08-21 06:47:09
【问题描述】:

我使用需要以下 xml 声明 <?xml version=\"1.0\" encoding=\"UTF-8\"?> 的服务器。是否有任何XmlSerializer 选项使用大写来编码值?

【问题讨论】:

  • 为什么不通过打开 xml 文件来执行 toUpper,然后使用 XElement 更改该部分,或者更好的是,打开文件,找到 encoding="",将其值更改为 upper.,然后保存跨度>
  • 我在没有任何 xml 声明的情况下创建 xml 字符串并连接正确的一个。但它很丑。
  • 您为什么要使用不正确地实现 XML 的服务器?如果它把这样一个基本的事情弄错了,你为什么要相信它可以把更重要的事情做对呢?我会很好地避开。
  • @MichaelKay 你会笑的。它是俄罗斯第二大银行:-)
  • 好吧,准备好迎接艰难的旅程。如果他们需要大写的编码,这表明他们正在使用自制的 XML 解析器,该解析器可能还有许多其他错误(因为他们无法通过 W3C 一致性测试套件运行它)。基本上,如果他们不使用符合标准的 XML 工具,那么您也不能这样做。标准的存在是有原因的......

标签: c# xml xml-serialization


【解决方案1】:

使用这个自定义类:

        class CustomUTF8Encoding : UTF8Encoding
        {
            public override string HeaderName => base.HeaderName.ToUpper();
            public override string WebName => base.WebName.ToUpper();
            public override string BodyName => base.BodyName.ToUpper();
        }

然后使用它:

    using (var streamWriter = new StreamWriter(output, new CustomUTF8Encoding())
    {
        serializer.Serialize(streamWriter, obj);
    }

【讨论】:

    【解决方案2】:

    使用 Xml Linq

                string ident = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root></Root>";
                XDocument doc = XDocument.Parse(ident);
                XElement root = doc.Root;
    

    【讨论】:

    • 这不能回答问题。 Linq(与任何符合标准的 XML 解析器一样)接受大写编码名称这一事实对正在寻找生成大写编码名称的序列化程序的人没有帮助。
    • 我的代码根节点可以添加任意xml序列化方式。
    • 但问题是问是否有序列化方法将编码写成大写。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    相关资源
    最近更新 更多