LINQ to XML - 它是如何工作的?
我的問題本質上是一個簡單的問題,儘管我在這裡尋找盡可能深入的答案:*LINQ to XML*如何在幕後工作?
現在,我在各種應用程序中使用 LINQ to XML 有相當多的經驗,所以它的介面對我來說並不陌生,但我對內部如何操作一無所知。現在,我對 LINQ 提供程序的工作方式(本質上是實現和利用訪問者模式)有了一些
IQueryable了解IQueryProvider。然而,我還沒有發現任何關於 LINQ to XML 的 LINQ 提供程序的資訊——即使使用 Reflector 也沒有讓我有所收穫,儘管我可能錯過了顯而易見的事情。最有趣的是,我無法在程序集/命名空間中找到任何 LINQ 提供程序(的實現IQueryProvider)的證據。System.Xml.Linq通過觀察 LINQ to XML 模型,我發現它是一種相當獨特的 LINQ 形式,因為 LINQ 查詢和相關的語法似乎並不是該技術的整體,它似乎更多地基於可查詢的 DOM模型提供了很多有用的擴展方法。所以真的,我首先想知道的是,LINQ to XML 是否甚至有標準意義上的查詢提供程序(例如 LINQ to SQL 有),或者它本質上是一個帶有擴展方法的框架,您可以在其之上使用 LINQ to Objects 以方便使用。此外,我也很好奇從 XML 程式碼到 DOM 層次結構的解析/轉換是如何完成的
XDocument——qutieXmlDocument在這個意義上與舊的相似嗎?XmlReader它是否在幕後使用或這樣的方式在載入時解析和解釋文件?這是一個非常開放的問題,因此任何關於 LINQ to XML 如何在幕後執行的資訊都將受到歡迎。我在這裡的主要目的是建立一個關於如何設計這種特定 LINQ 技術的圖景,以便我隨後可以嘗試自己模擬它以獲得與 XML 結構相似的格式。
LINQ to XML 實際上只是 LINQ-to-Objects,它適用於表示 XML 的對象。因此,當您編寫 LINQ 查詢以從 XDocument 中檢索節點時(例如),您實際上只是在呼叫返回 IEnumerable<T> 的擴展方法,並呼叫為 IEnumerable<T> 定義的標準查詢運算符。
因此,可以說 LINQ-to-XML 主要由 XElement 系列的 XML 表示類和為這些類提供的許多擴展方法組成,以使查詢更容易。
這也在這裡解釋。