【问题标题】:How to indent XML text and preserve line breaking in C#?如何在 C# 中缩进 XML 文本并保留换行符?
【发布时间】:2013-11-14 09:40:30
【问题描述】:

我的目标是使用 C# 代码以编程方式缩进手动编写的 XML 文档。

目前,我正在使用指定的 here 缩进它。

但是我还有两个问题:

  1. 缩进后,所有换行符都会消失(我确实想在 XML 文档中保留人工换行符)。
  2. 同时具有文本节点和子元素的 Xml 元素 - 合并到一行。例如:
<element>text
  <subElement></subElement>
</element>

将缩进到这个:

<element>text<subElement></subElement></element>

我猜以上两个问题其实是同一个问题。

【问题讨论】:

  • 你为什么要这个?只是为了看起来“好”?这种格式没有语义上的原因。换行符被解释为空格。
  • 为了保持 XML 的可读性:它是由人类编写的,也是由他们阅读的。有时使用换行符更容易理解 XML。
  • 你最好给人类一个漂亮的打印机,而不要管实际的文档。

标签: c# xml indentation xmlwriter


【解决方案1】:

一般来说,在 XML 文档中插入空格会改变文档的语义。

但是,如果您真的想通过 XML 嵌套(没有重排)来缩进行,大多数 XML 解析器附带的序列化程序都可以配置为执行此操作。

或者您可以将文档放入配置为缩进的 XSLT 样式表中。

这两种方法中的任何一种都比自己编写更简单,除非我在您的问题描述中遗漏了某些内容,否则它们应该满足您的需求。

【讨论】:

    【解决方案2】:

    如果您使用 XmlWriter,您可以创建一个新的 XmlWriterSettings 对象来传递您的设置。在这里你可以设置缩进、NewLineHandling 和许多其他有用的东西。

            XmlWriterSettings set = new XmlWriterSettings();
            set.NamespaceHandling = NamespaceHandling.OmitDuplicates;
            set.OmitXmlDeclaration = true;
            set.DoNotEscapeUriAttributes = false;
            set.Indent = true;
            set.NewLineChars = "\n";
            set.IndentChars = "\t";
            set.NewLineHandling = NewLineHandling.None;
            // Make any other changes... up to you
    
            XmlWriter writer = XmlWriter.Create(Console.Out, set);
            // You can use your writer with the passed settings
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多