Как создать строку с отступом XML из XDocument в C #? - PullRequest
23 голосов
/ 03 марта 2010

У меня есть объект XDocument, а метод ToString () возвращает XML без отступов. Как мне создать строку из этого содержащего отступ XML?

edit: я спрашиваю, как создать строку в памяти, а не записывать в файл.

edit: Похоже, я случайно задал здесь вопрос с подвохом ... ToString () возвращает XML с отступом.

Ответы [ 4 ]

23 голосов
/ 04 марта 2010
XDocument doc = XDocument.Parse(xmlString);
string indented = doc.ToString();
9 голосов
/ 03 марта 2010

С здесь

XmlDocument doc = new XmlDocument();
doc.LoadXml("<item><name>wrench</name></item>");

// Save the document to a file and auto-indent the output.
XmlTextWriter writer = new XmlTextWriter("data.xml",null);
writer.Formatting = Formatting.Indented;
doc.Save(writer);
7 голосов
/ 04 марта 2010

Еще один аромат того же супа ...; -)

StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
Console.WriteLine(sw.ToString());

Редактировать: спасибо Джону Сондерсу . Вот версия, которая должна лучше соответствовать Создание писателей XML на MSDN .

using System;
using System.Text;
using System.Xml;
using System.Xml.Linq;

class Program
{
    static void Main(string[] args)
    {
        XDocument doc = new XDocument(
        new XComment("This is a comment"),
        new XElement("Root",
            new XElement("Child1", "data1"),
            new XElement("Child2", "data2")
            )
            );

        var builder = new StringBuilder();
        var settings = new XmlWriterSettings()
        {
            Indent = true
        };
        using (var writer = XmlWriter.Create(builder, settings))
        {
            doc.WriteTo(writer);
        }
        Console.WriteLine(builder.ToString());
    }
}
2 голосов
/ 03 марта 2010

Чтобы создать строку с использованием XDocument (а не XmlDocument), вы можете использовать:

        XDocument doc = new XDocument(
            new XComment("This is a comment"),
            new XElement("Root",
                new XElement("Child1", "data1"),
                new XElement("Child2", "data2")
            )
        );

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        StringBuilder sb = new StringBuilder();
        using (XmlWriter writer = XmlTextWriter.Create(sb, settings)) {
            doc.WriteTo(writer);
            writer.Flush();
        }
        string outputXml = sb.ToString();

Редактировать: Обновлен для использования XmlWriter.Create и StringBuilder и в хорошей форме (using).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...