Как сделать отступ после новой строки в значении элемента xml при использовании XmlTextWriter?
Я пытаюсь сделать отступ после новой строки при использовании 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 ответа
Отступ, указанный в модуле записи, предназначен для отступов между элементами, в которых нет значительных пробелов. Пробел, который вы хотите создать, является значительным, поскольку он является частью текстового значения между открывающим и закрывающим тегами.
Если бы писатель сделал это с обычным xml, он бы изменил текстовое содержимое недопустимым способом. Вы должны сделать это самостоятельно.
Боюсь, ваш код точно соответствует тому, что вы говорите.
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>
Это определенно понятнее, но может показаться странным, когда "а" становится очень длинным текстом.