使用XDocument编写XML时如何更改用于缩进的字符数

时间:2013-08-29 00:23:15

标签: c# xml linq-to-xml

我正在尝试将XDocument的默认缩进从2更改为3,但我不太确定如何继续。怎么办呢?

我熟悉XmlTextWriter并使用了代码:

using System.Xml;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string destinationFile = "C:\myPath\results.xml";
            XmlTextWriter writer = new XmlTextWriter(destinationFile, null);
            writer.Indentation = 3;
            writer.WriteStartDocument();

            // Add elements, etc

            writer.WriteEndDocument();
            writer.Close();
        }
    }
}

对于我使用XDocument的另一个项目,因为它对我的实现更有效:

using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Xml;
using System.Text;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Source file has indentation of 3
            string sourceFile = @"C:\myPath\source.xml";
            string destinationFile = @"C:\myPath\results.xml";

            List<XElement> devices = new List<XElement>();

            XDocument template = XDocument.Load(sourceFile);        

            // Add elements, etc

            template.Save(destinationFile);
        }
    }
}

1 个答案:

答案 0 :(得分:20)

@John Saunders和@ sa_ddam213指出,new XmlWriter已被弃用,所以我深入挖掘并学会了如何使用XmlWriterSettings更改缩进。我从@ sa_ddam213得到的using陈述想法。

我将template.Save(destinationFile);替换为以下内容:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "   ";  // Indent 3 Spaces

using (XmlWriter writer = XmlTextWriter.Create(destinationFile, settings))
{                    
    template.Save(writer);
}

这给了我需要的3个空间缩进。如果需要更多空格,只需将其添加到IndentChars"\t"即可用于标签。