在使用XMLTextWriter时,如何在XML元素值中缩进newline?
-
22-08-2019 - |
题
使用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());
}
解决方案
作者中指定的凹痕是在没有显着空格的元素之间进行的凹痕。您要创建的空格是siginficats,因为它构成了开口和关闭标签之间文本值的一部分。
如果作者要对正常的XML做到这一点,它将以不可接受的方式修改文本内容。您需要自己做。
其他提示
恐怕,您的代码doesexcact doessact of您告诉它要做的事情。
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>
这绝对是清晰的,但是当“ a”变成很长的文字时,看起来可能很奇怪。
不隶属于 StackOverflow