我正在尝试通读 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")
会很甜。