LINQ to XML 是一種啟用了 LINQ 的內存 XML 編程接口,使用它,可以在 .NET Framework 編程語言中處理 XML。
它將 XML 文檔置於內存中,這一點很像文檔對象模型 (DOM)。 您可以查詢 和修改 XML 文檔,修改之後,可以將其另存為文件,也可以將其序列化然後通 過網絡發送。 但是,LINQ to XML 與 DOM 不同: 它提供一種新的對象模型, 這是一種更輕量的模型,使用也更方便,這種模型利用了 Visual C# 2008 在語 言方面的改進。
LINQ to XML 最重要的優勢是它與 Language-Integrated Query (LINQ) 的 集成。 由於實現了這一集成,因此,可以對內存 XML 文檔編寫查詢,以檢索元 素和屬性的集合。 LINQ to XML 的查詢功能在功能上(盡管不是在語法上)與 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 後,可提供更強的 類型化功能、編譯時檢查和改進的調試器支持。
通過將查詢結果用作 XElement 和 XAttribute 對象構造函數的參數,實現 了一種功能強大的創建 XML 樹的方法。 這種方法稱為“函數構造” ,利用這種方法,開發人員可以方便地將 XML 樹從一種形狀轉換為另一種形狀 。
LINQ to XML 提供了改進的 XML 編程接口,這一點可能與 LINQ to XML 的 LINQ 功能同樣重要。 通過 LINQ to XML,對 XML 編程時,您可以實現任何預 期的操作,包括:
從文件或流加載 XML。
將 XML 序列化為文件或流。
使用函數構造從頭開始創建 XML。
使用類似 XPath 的軸查詢 XML。
使用 Add、Remove、ReplaceWith 和 SetValue 等方法對內存 XML 樹進行操 作。
使用 XSD 驗證 XML 樹。
使用這些功能的組合,可將 XML 樹從一種形狀轉換為另一種形狀。
創建 XML 樹是否方便,這一點非常重要。 例如,若要創建一個小型 XML 樹 ,可以編寫以下 C# 代碼:
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555- 0144",
new XAttribute("Type", "Home")),
new XElement("phone", "425-555- 0145",
new XAttribute("Type", "Work")),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
請注意,縮進用於構造 XML 樹的代碼可顯示基礎 XML 的結構。
直接使用 XML 元素
在使用 XML 編程時,主要關注的通常是 XML 元素,也可能關注屬性。 在 LINQ to XML 中,可以直接使用 XML 元素和屬性。 例如,可以執行以下操作:
創建 XML 元素而根本不使用文檔對象。 當必須使用 XML 樹的片段時,這可 簡化編程。
直接從 XML 文件加載 T:System.Xml.Linq.XElement 對象。
將 T:System.Xml.Linq.XElement 對象序列化為文件或流。
使用 LINQ to XML 時,僅在文檔的根級別添加注釋或處理說明時,才需使用 XDocument
名稱和命名空間的簡化處理
處理名稱、命名空間和命名空間前綴通常是 XML 編程的復雜部分。LINQ to XML 完全不需要處理命名空間前綴,從而簡化了名稱和命名空間。 可以輕松控 制命名空間前綴。 但如果您決定不顯式控制命名空間前綴,則在序列化時, LINQ to XML 將會分配命名空間前綴(如果需要)或使用默認命名空間進行序列 化。 如果使用默認命名空間,則生成的文檔中將沒有命名空間前綴。
LINQ to XML 也不需要用戶理解什麼是 NameTable 以及其使用方式。