Linq To Xml學習 - 1.LINQ to XML 概述
Linq To Xml學習 - 1.LINQ to XML 概述
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 以及其使用方式。