2.5GBのXMLファイルを読み、特定のノード、たとえば「CD」要素と「DVD」要素を削除しようとしています。現在、私は次のようなことをしています。
using (XmlReader reader = XmlReader.Create("file.xml"))
{
DeleteElements(reader.ReadElements("CD"));
DeleteElements(reader.ReadElements("DVD")); // reader returns 0 elements
}
注:DeleteElements
これらの要素をループしてドキュメントから削除するだけですが、この質問の目的ではほとんど重要ではありません。
現在、「DVD」要素が取得されていないことがわかりました。これまでXmlReader
に多くの作業を行ったことがある場合は、ここで問題の原因を理解できると確信しています。リーダーが「CD」ノードのドキュメントを読んだ後、リーダーが「DVD」要素を見つけられないのは、リーダーがドキュメントの最後にあります。
XMLファイルのサイズが大きく、取得しようとしている要素の数を考慮すると、ドキュメント全体をメモリにロードできませんOutOfMemoryException
。これは、XDocumentまたはXPathDocumentが適切でないことを意味します。
XmlReaderがドキュメントを読み取るときに「CD」と「DVD」の両方を返すようにする方法はありますか?最初にドキュメントをロードするのはかなり時間がかかるので、これを何度もやりたくありません。何か素晴らしいものが甘いreader.ReadElements("DVD|CD")
でしょう。