C#で大きなXMLファイルを解析する必要があります。私はLINQ-to-XMLを使用します。私はxmlreaderとlinqをxmlに結合する
<root>
<node></node>
<node></node>
</root>
のような構造が、私は、各ノード上のループに使用XmlReader
が好きで、各ノードを取得し、その上で動作するようにLINQからXMLを使用する必要がありますか?
私は現在のノードだけをメモリに持っています。
C#で大きなXMLファイルを解析する必要があります。私はLINQ-to-XMLを使用します。私はxmlreaderとlinqをxmlに結合する
<root>
<node></node>
<node></node>
</root>
のような構造が、私は、各ノード上のループに使用XmlReader
が好きで、各ノードを取得し、その上で動作するようにLINQからXMLを使用する必要がありますか?
私は現在のノードだけをメモリに持っています。
あなたはそのような何かを行うことができます。
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");
}
}
これは動作しますが、場合によってはエラーが発生します。オブジェクトをキャストできません型 'System.Xml.Linq.XText'を入力して 'System.Xml.Linq.XElement xmlreader'と入力します。なぜ私はキャストの前にテストを行うのか分かりません(私はノードタイプをテストします)。しかし、私は結果を失うかどうかわかりません – bobosh
@bobosh、この問題の原因はわかりません...問題を引き起こすXML文書のサブセットを投稿できますか? –
常に同じテンプレートです。私はxdocumentでノード "ノード"にループする前に問題はありません。 2千のレコードで3つのレコードを失う。このレコードでは何も変わりません – bobosh
あなたの実際の質問はここで何ですか? – msarchet
@msarchet、私は質問がはっきりしていると思います...彼はそれぞれの ''要素でXMLにLinqを使用したいが、文書全体をメモリにロードするのを避けるためにこれらの要素を取得するために 'XmlReader'を使用したい。 –
[Linq to XML、yield and others](http://stackoverflow.com/questions/6957483/linq-to-xml-yield-and-others) – casperOne