シリアル化時に空白を維持する (LINQ to XML)

この記事では、XML ツリーをシリアル化するときに空白を制御する方法について説明します。

一般的なシナリオでは、インデントされた XML を読み取り、メモリ内に空白のテキスト ノードなしで (つまり空白を維持せずに) XML ツリーを作成し、XML に対して何らかの操作を実行し、インデント付きで XML を保存します。 書式を設定して XML をシリアル化する場合は、XML ツリー内の有意の空白のみが維持されます。 これが LINQ to XML の既定の動作です。

もう 1 つのよくあるシナリオは、意図的にインデントされた XML を読み取って変更する場合です。 場合によっては、このインデントを一切変更しないようにする必要があります。 LINQ to XML でこれを行うには、XML を読み込む際または解析する場合に空白を維持し、XML をシリアル化するときに書式設定を無効にします。

XML ツリーをシリアル化するメソッドの空白に関する動作

XElement クラスと XDocument クラスにある次のメソッドは、XML ツリーをシリアル化します。 XML ツリーは、ファイル、TextReader、または XmlReader にシリアル化できます。 ToString メソッドは、文字列にシリアル化します。

メソッドが SaveOptions を引数として受け取らない場合は、シリアル化された XML が書式設定 (インデント) されます。 この場合、XML ツリー内の意味のない空白はすべて破棄されます。

メソッドが SaveOptions を引数として受け取る場合は、シリアル化された XML が書式設定 (インデント) されないことを指定できます。 この場合、XML ツリー内の空白はすべて維持されます。