2011-08-05 21 views
11

XMLドキュメントのLINQクエリのようなEntity Frameworkを実行するための.NETライブラリやサードパーティ製ツールがあるかどうかは疑問でした。私はすでにXDocumentオブジェクトのクエリを実行することを可能にするLINQ to XMLがあることを知っています。に既にロードされているがありますが、XMLドキュメントのサイズ(ギガバイトを超える)が大きければどうなりますか?Linq to XML、yield and others

XDocumentオブジェクトではなく、XmlReaderにこのクエリを渡すオプションがあります。それは箱からすぐに可能ですか?

+0

[OK]を、より多くの私は、このスレッドにぶつかってきたビットを検索した後: http://stackoverflow.com/questions/2441673/reading-xml-with-xmlreader-in-c そして、この: ます。http:/ /blogs.msdn.com/b/xmlteam/archive/2007/03/24/streaming-with-linq-to-xml-part-2.aspx 私はこの問題をほぼ正確な手法で解決しようと考えていましたそれでも、完全なサポートとより良いパフォーマンスが欠けています。 –

答えて

3

this codeplex projectをご覧ください。

+0

まさに私が探していたものですが、コード化された方法も大好きです! ありがとう! –

1

は、私はあなたがすべて XML文書をフィットするソリューションを持っています信じていませんが、あなたはそれをを行うことができます。

IEnumerable<T>を実装するクラスを作成し、ストリームするストリームをXmlReaderにします。

次に、IEnumerable<T>の実装でタイプパラメータTに使用されるタイプを作成します。

あなたがGetEnumeratorの実装では、あなたがTの単一のインスタンスを作成することができますXmlReader上のさまざまなMove*Read*メソッドを呼び出すと、ことをしたら。

インスタンスがTの場合、yield returnを使用してアイテムを生成します。 GetEnumeratorの本文の残りの部分は、XmlReaderをストリームするときに適切にループします。

これを手に入れれば、文書全体を最初にメモリに読み込まなくても、取得した時点でTのインスタンスをストリーミングします。

もちろん、一度に読み込むドキュメントの量をテストする必要があります。

+0

ありがとう、あなたが上記のテクニックを使用していくつかの似たような解決策を見つけましたが、私はサードパーティのツールjdvを投稿しました。 –