使用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”变成很长的文字时,看起来可能很奇怪。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top