XMLTextWriterを使用するときにXML要素値でNewLineをインデントする方法は?

StackOverflow https://stackoverflow.com/questions/874147

  •  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());
}
役に立ちましたか?

解決

作家で指定されているインデントは、重要な空白がない要素間のインデントのためです。作成したい空白は、開口部と閉鎖タグの間にテキスト値の一部を形成するため、Siginficantです。

ライターが通常の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」はまだ正確に1つのタブをインデントされます。

したがって、自分でインデンテーションを計算して、適切な数のタブを書くか、1行の要素全体を使用することもできます。

<element>a</element>

これは間違いなく明確ですが、「A」が非常に長いテキストになると奇妙に見えるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top