C #: простой способ перенести однострочные XML-файлы в понятные человеку многострочные

2

Я ищу простой способ принести 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>
Теги:

3 ответа

7

Если у вас есть .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);
}
  • 0
    разница между версией 3.5 и версией 2.0 заключается в том, что 3.5. это решение для имени файла и имени файла, а 2.0 решение для строки в строку. Как будет имя файла для решения имени файла в 2.0?
  • 0
    Вместо этого создайте XmlWriter, который записывает в файл: XmlWriter writer = XmlWriter.Create (имя файла, настройки).
Показать ещё 4 комментария
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();
    }
}
  • 1
    Шаблон xtw выглядит слишком сложным, использование будет лучше.
  • 0
    Мало того, что оператор using будет лучше, вы также можете использовать XmlWriter.Create (sb), чтобы не беспокоиться и о StringWriter.
Показать ещё 3 комментария
3

Если у вас есть Visual Studio:

Создайте новый XML файл и просто вставьте свой код. Он автоматически переформатирует его.

  • 0
    Это то чем я занимаюсь!
  • 0
    это было не то, что я просил. Я попросил «внедрить» это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню