2009-05-17 69 views
4

私は基本的に私はこのXmlTextWriterを使用しているときに、xml要素の値に改行を挿入する方法は?

<?xml version="1.0" encoding="utf-16"?> 
<element> 
    a 
</element> 

しかし、私はここでは、この

<?xml version="1.0" encoding="utf-16"?> 
<element> 
a 
</element> 

は私の現在のテストで取得下のコードを使用したくてXmlTextWriter

を使用するときに改行した後、インデントしようとしていますハーネス

[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()); 
} 

答えて

6

インデント指定ライターでは、重要な空白がない要素間の字下げを行います。あなたが作成したい空白は、開始タグと終了タグの間のテキスト値の一部を形成するので、控えめです。

作者がそれを通常のxmlにするのであれば、受け入れられない方法でテキストの内容を変更することになります。あなたはこれを自分で行う必要があります。

+0

ありがとうanthony。これは私が期待したものです。私はいくつかの自動化された方法があることを望んでいた。 – Simon

1

あなたのコードはあなたの言うこととまったく同じです、私は恐れています。

xmlWriter.WriteStartElement("element"); //<element> 
xmlWriter.WriteString("\r\na\r\n");  //newline, directly followed by 'a' 
xmlWriter.WriteEndElement();   //</element> 

インデントをしたい場合は、そのアプローチの問題は、あなたの<element>がすでにインデントされた場合、それが台無しになることです

xmlWriter.WriteString("\r\n\ta\r\n");  

のように、あなたのコードでこれを記述する必要があります字下げ - あなたの 'a'は依然として正確に1つのタブでインデントされます。

ですから、

<element>a</element> 

を何とかインデントを自分で計算して、タブの適切な数を書き込み、またはあなたが1行で全体の要素で行くことができるどちらかこれは間違いなく明確ですが、とき、それは奇妙に見えるかもしれません'a'は非常に長いテキストになります。

関連する問題