Я пытаюсь прочитать файл XML размером 2,5 ГБ и удалить определенные узлы, скажем, элементы «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")
, было бы приятно.