Как сделать отступ после новой строки в значении элемента xml при использовании XmlTextWriter? - PullRequest
4 голосов
/ 17 мая 2009

Я пытаюсь сделать отступ после новой строки при использовании XmlTextWriter

Так что по сути я хочу это

<?xml version="1.0" encoding="utf-16"?>
<element>
  a
</element>

но используя код ниже я получаю это

<?xml version="1.0" encoding="utf-16"?>
<element>
a
</element>

Вот мой текущий тестовый жгут

[Test]
public void XmlIndentingTest()
{
    var provider = new StringBuilder();
    var settings = new XmlWriterSettings
                       {
                           Indent = true,
                           IndentChars = "  ",
                       };
    using (var writer = new StringWriter(provider))
    {
        using (var xmlWriter = XmlTextWriter.Create(writer, settings))
        {
            xmlWriter.WriteStartElement("element");
            xmlWriter.WriteString("\r\na\r\n");
            xmlWriter.WriteEndElement();
        }
    }
    Debug.WriteLine(provider.ToString());
}

Ответы [ 2 ]

6 голосов
/ 17 мая 2009

Отступ, указанный в модуле записи, предназначен для отступа между элементами, в которых нет значительных пробелов. Пробел, который вы хотите создать, является значительным, поскольку он является частью текстового значения между открывающим и закрывающим тегами.

Если бы писатель сделал это с обычным xml, он бы изменил текстовое содержимое недопустимым способом. Вы должны сделать это самостоятельно.

1 голос
/ 17 мая 2009

Боюсь, ваш код в точности соответствует тому, что вы говорите.

xmlWriter.WriteStartElement("element"); //<element>
xmlWriter.WriteString("\r\na\r\n");     //newline, directly followed by 'a'
xmlWriter.WriteEndElement();            //</element>

Если вы хотите сделать отступ, вы должны будете написать это в своем коде, например

xmlWriter.WriteString("\r\n\ta\r\n");    

Проблема с этим подходом состоит в том, что если ваш <element> уже имеет отступ, он испортит отступ - ваш 'a' будет по-прежнему иметь отступ только на одну вкладку.

Таким образом, вы можете либо самостоятельно рассчитать отступ, и написать соответствующее количество вкладок, либо перейти с целым элементом в одну строку

<element>a</element>

Это определенно яснее, но может показаться странным, когда «а» становится очень длинным текстом.

...