2009-05-10 18 views
11

私の質問は本質的に単純なものですが、私はここで可能な答えを深く探しています:LINQ to XMLはどのように舞台裏で動作しますか?LINQ to XML - どのように機能しますか?

LINQ to XMLを多種多様なアプリケーションで使用しているので、インタフェースは私にとっては奇妙なことではありませんが、内部動作の仕方は全く分かりません。今、私はLINQプロバイダがどのように動作するかについていくつかの理解を持っています(IQueryableIQueryProviderを実装して、ビジターパターンを本質的に利用しています)。しかし、私はLINQ for LINQ for XMLに関する何かを発見することはできませんでした。反射鏡を使っていても、どこにでもいられませんでした。最も興味深いことに、私はSystem.Xml.Linqアセンブリ/名前空間内でLINQプロバイダ(実装IQueryProvider)の証拠を見つけることができませんでした。

LINQからXMLモデルを観察すると、それはLINQクエリと関連する構文がテクノロジにとって非常に重要ではないように見えるという点で、私はかなり独特のLINQ形式です。多くの便利な拡張メソッドを提供する問い合わせ可能なDOMモデルの周りにあります。だから私が最初に知りたいのは、LINQ to XMLは、標準的な意味でのクエリプロバイダ(たとえばLINQ to SQLがある)を持っているのでしょうか、それとも本質的に拡張メソッドを持つフレームワークです。使用を容易にするためにLINQ to Objectsを使用します。また、XMLコードからDOM階層への構文解析/変換がどのように行われているのか、興味があります - XDocument qutieは、この意味では古いXmlDocumentと似ていますか?読み込み時に文書を解析して解釈するために、舞台裏でXmlReaderなどを使用していますか?

これはオープンエンドの質問であるため、LINQ to XMLの背後でどのように動作するかに関する情報は、大歓迎です。ここでの私の意図は、主に、この特定のLINQテクノロジがどのように設計されたかの写真を構築して、XMLと同様の構造を持つ形式のためにそれを自分自身でエミュレートしようとしていることです。

答えて

13

LINQ to XMLは、実際にはLINQ-to-Objectsであり、XMLを表すオブジェクトで動作します。したがって、XDocumentからノードを取得するためのLINQクエリを書くときは、実際にはIEnumerable <T>を返す拡張メソッドを呼び出して、IEnumerable <T>に対して定義されている標準クエリ演算子を呼び出します。

LINQ-to-XMLは、ほとんどの場合、XMLを表すクラスのXElementファミリと、それらのために提供される多くの拡張メソッドで構成されていると言えるでしょう。

hereについても説明します。

+0

ええ、これは私が疑っていたものです。情報をありがとう。 – Noldorin

関連する問題