我正在寻找一种简单的方法,将带有一行的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)
如果你有.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)