【问题标题】:Get UTF-8 in Uppercase using XDocument使用 XDocument 获取大写的 UTF-8
【发布时间】:2011-12-17 20:19:40
【问题描述】:

我需要在使用XDocument 制作的 XML 文档的顶部添加 XML 编码和版本。

我有这个,但它是小写的,它必须是大写的。

我需要做什么?

我使用名为“doc”的XDocument 类声明了一个新的 XML 文档。

我使用doc.Save(); 将其保存到一个文件中。

我试过了:

  • doc.Declaration.Encoding.ToUpper();
  • 声明一个新的XDeclaration
  • 以大写形式输入编码并将我的doc.Declaration 设置为我的XDeclaration

它仍然是小写的。

【问题讨论】:

  • 为什么需要大写?它对符合标准的 XML 解析器应该没有影响。
  • 我同意,但这不取决于我,它需要大写。我尝试过“doc.Declaration.Version.ToUpper”,声明一个新的 XDeclaration,以大写形式输入版本并将我的“doc.Declaration”设置为我的 XDeclaration。它仍然以小写形式出现,我正在使用 doc.Save();谢谢
  • 请编辑您的问题并使用您刚刚在评论中输入的详细信息进行更新。否则,阅读您的问题的人可能会忽略这些内容。
  • 您是否尝试遍历所有doc.Declaration 属性和ToUppering 属性名称?
  • 是的,我得到对象引用未设置为对象的实例。当我尝试 'doc.Declaration.Version = "UTF-8";'我在这行代码上遇到了同样的错误。

标签: c# .net xml declaration linq-to-xml


【解决方案1】:

您可以创建自定义XmlTextWriter,例如:

public class CustomXmlTextWriter : XmlTextWriter
{
    public CustomXmlTextWriter(string filename)
        : base(filename, Encoding.UTF8)
    {

    }

    public override void WriteStartDocument()
    {
        WriteRaw("<?xml VERSION=\"1.0\" ENCODING=\"UTF-8\"?>");
    }

    public override void WriteEndDocument()
    {
    }
}

然后使用它:

using (var writer = new CustomXmlTextWriter("file.xml"))
{
    doc.Save(writer);
}

【讨论】:

  • 它远非完美。它甚至不是 XML。 XML 允许(实际上更喜欢)编码名称为大写,但关键字“encoding”和“version”必须为小写。
  • 但是这段代码丢失了格式,你如何保留格式
【解决方案2】:

工作解决方案,使用 XmlDocument:

 myXmldoc.FirstChild.Value = "version=\"1.0\" encoding=\"UTF-8\""; 

正如 user726720 所指出的,Kirill Polishchuk 给出的答案丢失了格式并需要模式代码。

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 2011-12-12
    • 2015-10-02
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多