Как установить свойство Settings в XmlTextWriter, чтобы я мог записать каждый атрибут XML в отдельной строке? - PullRequest
15 голосов
/ 23 ноября 2011

У меня есть этот бит кода, который сериализует объект в файл. Я пытаюсь получить каждый атрибут XML для вывода на отдельной строке. Код выглядит так:

public static void ToXMLFile(Object obj, string filePath)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.NewLineOnAttributes = true;

    XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
    writer.Settings = settings; // Fails here.  Property is read only.

    using (Stream baseStream = writer.BaseStream)
    {
        serializer.Serialize(writer, obj);
    }
}

Единственная проблема в том, что свойство Settings объекта XmlTextWriter доступно только для чтения.

Как установить свойство Settings для объекта XmlTextWriter, чтобы сработал параметр NewLineOnAttributes?


Ну, я думал, что мне нужен XmlTextWriter, поскольку XmlWriter - это класс abstract В некотором роде сбивает с толку, если вы спросите меня. Окончательный рабочий код здесь:

/// <summary>
/// Serializes an object to an XML file; writes each XML attribute to a new line.
/// </summary>
public static void ToXMLFile(Object obj, string filePath)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.NewLineOnAttributes = true;

    using (XmlWriter writer = XmlWriter.Create(filePath, settings))
    {
        serializer.Serialize(writer, obj);
    }
}

Ответы [ 2 ]

19 голосов
/ 23 ноября 2011

Используйте статический Create() метод XmlWriter.

XmlWriter.Create(filePath, settings);

Обратите внимание, что вы можете установить свойство NewLineOnAttributes в настройках.

4 голосов
/ 13 января 2017

Я знаю, что вопрос старый, во всяком случае, на самом деле можно установить отступ для XMLTextWriter.В отличие от XMLwriter, вам не нужно проходить через настройки;Вы должны использовать свойство Formatting:

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
w.Formatting = Formatting.Indented; 

См. https://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.formatting(v=vs.110).aspx

...