C#:将One-line-XML文件引入人类可读多行的简单方法

时间:2009-07-01 10:50:11

标签: c# xml

我正在寻找一种简单的方法,将带有一行的xml-File带到一个没有换行符的C#中的结构化人类可读版本。 System.XML中是否有任何实现,或者是一个微小的开源框架或实现它的最佳实践?

离。转换这个XML-String:


<Root><Node id="1"><Childnode>Text</Childnode></Node><Node id="2">Text<Kid name="jack" /></Node></Root>


<Root>
  <Node id="1">
    <Childnode>
      Text
    </Childnode>
  </Node>
  <Node id="2">
    Text
    <Kid name="jack" />
  </Node>
</Root>

3 个答案:

答案 0 :(得分:7)

如果你有.NET 3.5:

XDocument document = XDocument.Load(filename);
document.Save(filename);

这将自动缩进。请注意,它不会像您提出的问题那样完成,因为您只是缩进部分节点。那会更棘手。

如果你坚持使用.NET 2.0,那么重新调整Craig的方法并改为使用文件而不是字符串:

public static void FormatXmlString(string inputFile, string outputFile)
{
    XmlDocument document = new XmlDocument();
    document.Load(inputFile);
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    using (XmlWriter writer = XmlWriter.Create(outputFile, settings))
    {
        document.WriteTo(writer);
    }
}

使用C#3 XmlWriterSettings但可能只是:

new XmlWriterSettings { Indent = true }

可以嵌入到XmlWriter.Create的调用中,但是如果您使用的是.NET 2.0,则可能不能使用C#3。

编辑:如果输入文件名部分导致问题,您可以使用:

XmlDocument document = new XmlDocument();
using (Stream stream = File.OpenRead(inputFile))
{
    document.Load(stream);
}

答案 1 :(得分:4)

这是我为此目的编写的一个方便的“FormatXML”类:

using System;
using System.Text;
using System.Xml;
using System.IO;

public static class FormatXML
{
    public static string FormatXMLString(string sUnformattedXML)
    {
        XmlDocument xd = new XmlDocument();
        xd.LoadXml(sUnformattedXML);
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        XmlTextWriter xtw = null;
        try
        {
            xtw = new XmlTextWriter(sw);
            xtw.Formatting = Formatting.Indented;
            xd.WriteTo(xtw);
        }
        finally
        {
            if(xtw!=null)
                xtw.Close();
        }
        return sb.ToString();
    }
}

答案 2 :(得分:3)

如果您有Visual Studio:

创建一个新的XML文件,然后粘贴您的代码。它会自动重新格式化。