代码之家  ›  专栏  ›  技术社区  ›  Simon Randy Burden

使用xmlTextWriter时,如何在xml元素值的换行后缩进?

  •  4
  • Simon Randy Burden  · 技术社区  · 15 年前

    使用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 回复  |  直到 15 年前
        1
  •  6
  •   AnthonyWJones    15 年前

    在编写器中指定的缩进用于元素之间没有明显空白的缩进。您要创建的空白是sigincant,因为它是开始和结束标记之间的文本值的一部分。

    如果编写者要对普通的XML执行此操作,则会以不可接受的方式修改文本内容。你需要自己去做。

        2
  •  1
  •   Treb    15 年前

    恐怕你的代码做了你告诉它要做的事情。

    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”变成一个很长的文本时,它可能看起来很奇怪。

    推荐文章