載入或剖析 XML 時,保留空白字元 (LINQ to XML)

本文描述如何控制 LINQ to XML 的空白字元行為。

常見的案例為讀取縮排的 XML、建立沒有任何空白字元文字節點 (也就是不保留空白字元) 的記憶體內 XML 樹狀結構、對 XML 執行某些運算,然後儲存包含縮排的 XML。 當您序列化具有格式的 XML 時,只會保留 XML 樹狀結構中的有效空白字元。 這是 LINQ to XML 的預設行為。

其他常見案例為讀取與修改已經過刻意縮排的 XML。 您可能不想用任何方式變更這個縮排。 若要在 LINQ to XML 中達到這個效果,請於載入或剖析 XML 時保留空白字元,並在序列化 XML 時停用格式化。

本文描述填入 XML 樹狀結構之方法的空白字元行為。 如需在序列化 XML 樹狀結構時,控制空白字元的相關資訊,請參閱序列化時保留空白字元

填入 XML 樹狀結構之方法的行為

下列 XElementXDocument 類別中的方法會填入 XML 樹狀結構。 您可以從檔案、TextReaderXmlReader 或字串填入 XML 樹狀:

如果此方法不取 LoadOptions 作為引數,則該方法將不會保留無意義的空白字元。

在大部分的情況下,如果此方法採用 LoadOptions 當做引數,您可以選擇性地保留有效空白字元當做 XML 樹狀結構中的文字節點。 不過,如果此方法是從 XmlReader 載入 XML,XmlReader 會決定是否要保留空白字元。 設定 PreserveWhitespace 不會有任何作用。

利用這些方法,如果保留空白字元,會將有效的空白字元插入到 XML 樹狀結構中,當做 XText 節點。 如果不保留空白字元,就不會插入文字節點。

您可以使用 XmlWriter 來建立 XML 樹狀結構。 寫入到 XmlWriter 中的節點會填入樹狀結構中。 不過,當您使用這個方法建置 XML 樹狀時,不管節點是否為空白字元,也不管空白字元是否有效,都會保留所有節點。