Я ищу простой способ принести xml файл с одной строкой без строк в хорошую структурированную читабельную версию на С#. Есть ли какая-либо реализация уже в 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>
Если у вас есть .NET 3.5:
XDocument document = XDocument.Load(filename);
document.Save(filename);
Это будет отступ автоматически. Обратите внимание, что это будет не так, как ваш вопрос задал вопрос, потому что вы только отступаете от некоторых узлов. Это будет сложнее.
Если вы застряли с .NET 2.0, здесь метод Craig rejigged и изменился для использования файлов вместо строк:
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);
}
}
С С# 3 XmlWriterSettings
, но может быть просто:
new XmlWriterSettings { Indent = true }
который может быть встроен в вызов XmlWriter.Create
, но если вы используете .NET 2.0, вы, вероятно, не сможете использовать С# 3.
РЕДАКТИРОВАТЬ: Если часть входного имени файла вызывает проблему, вы можете использовать:
XmlDocument document = new XmlDocument();
using (Stream stream = File.OpenRead(inputFile))
{
document.Load(stream);
}
Вот удобный класс "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();
}
}
Если у вас есть Visual Studio:
Создайте новый XML файл и просто вставьте свой код. Он автоматически переформатирует его.