2011-08-11 2 views
2

C#で大きなXMLファイルを解析する必要があります。私はLINQ-to-XMLを使用します。私はxmlreaderとlinqをxmlに結合する

<root> 
     <node></node> 
     <node></node> 
</root> 

のような構造が、私は、各ノード上のループに使用XmlReaderが好きで、各ノードを取得し、その上で動作するようにLINQからXMLを使用する必要がありますか?

私は現在のノードだけをメモリに持っています。

+0

あなたの実際の質問はここで何ですか? – msarchet

+0

@msarchet、私は質問がはっきりしていると思います...彼はそれぞれの ''要素でXMLにLinqを使用したいが、文書全体をメモリにロードするのを避けるためにこれらの要素を取得するために 'XmlReader'を使用したい。 –

+0

[Linq to XML、yield and others](http://stackoverflow.com/questions/6957483/linq-to-xml-yield-and-others) – casperOne

答えて

2

あなたはそのような何かを行うことができます。

string path = @"E:\tmp\testxml.xml"; 
using (var reader = XmlReader.Create(path)) 
{ 

    bool isOnNode = reader.ReadToDescendant("node"); 
    while (isOnNode) 
    { 
     var element = (XElement)XNode.ReadFrom(reader); 

     // Use element with Linq to XML 
     // ... 

     isOnNode = reader.ReadToNextSibling("node"); 
    } 
} 
+0

これは動作しますが、場合によってはエラーが発生します。オブジェクトをキャストできません型 'System.Xml.Linq.XText'を入力して 'System.Xml.Linq.XElement xmlreader'と入力します。なぜ私はキャストの前にテストを行うのか分かりません(私はノードタイプをテストします)。しかし、私は結果を失うかどうかわかりません – bobosh

+0

@bobosh、この問題の原因はわかりません...問題を引き起こすXML文書のサブセットを投稿できますか? –

+0

常に同じテンプレートです。私はxdocumentでノード "ノード"にループする前に問題はありません。 2千のレコードで3つのレコードを失う。このレコードでは何も変わりません – bobosh

関連する問題