我正在寻找一种简单的方法,将带有一行的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>
答案 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文件,然后粘贴您的代码。它会自动重新格式化。