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

Mic*_*cha 3 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>
Run Code Online (Sandbox Code Playgroud)


<Root>
  <Node id="1">
    <Childnode>
      Text
    </Childnode>
  </Node>
  <Node id="2">
    Text
    <Kid name="jack" />
  </Node>
</Root>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

如果你有.NET 3.5:

XDocument document = XDocument.Load(filename);
document.Save(filename);
Run Code Online (Sandbox Code Playgroud)

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

如果你坚持使用.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

new XmlWriterSettings { Indent = true }
Run Code Online (Sandbox Code Playgroud)

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

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

XmlDocument document = new XmlDocument();
using (Stream stream = File.OpenRead(inputFile))
{
    document.Load(stream);
}
Run Code Online (Sandbox Code Playgroud)