如何在C#中缩进XML文本并保留换行符?

时间:2013-11-14 09:40:31

标签: c# xml indentation xmlwriter

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

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

但我仍有两个问题:

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

    将缩进至:

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

    我猜两个上述问题实际上都是同一个问题。

2 个答案:

答案 0 :(得分:1)

通常,将空格插入XML文档可能会改变文档的语义。

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

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

这些方法中的任何一种都比自己编写方法简单,除非我错过了你的问题描述中的某些内容,否则他们应该做你需要的。

答案 1 :(得分:1)

如果您使用的是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
相关问题