Как мне прочитать последние N элементов XML-документа, используя XmlReader? - PullRequest
1 голос
/ 15 сентября 2010

Скажите, у меня есть это:

<parent>
  <child name="1" />
  <child name="2" />
  ...
  <child name="8000001" />
  <child name="8000002" />
  <child name="8000003" />
  <child name="8000004" />
  <child name="8000005" />
</parent>

Как мне прочитать последние пять дочерних элементов?Из-за размера файла невозможно использовать XElement.Parse (...) и т. Д. Файл необходимо прочитать как поток с помощью XmlReader.

1 Ответ

1 голос
/ 15 сентября 2010

Вы можете хранить циклический буфер - добавляйте каждый элемент в буфер по мере его разбора (и, поскольку вы не будете разбирать все это, вы можете использовать XElement.Load с читателем, расположенным в начале элемента) и выбрасывать старые элементы, когда вы читаете новые. Вы создадите очень много мусора, но, если повезет, большая его часть будет в gen0, поэтому проблем не будет слишком много.

Я не знаю каких-либо классов циклического буфера в основной среде, но вы могли бы либо написать универсальный класс самостоятельно, найти стороннюю библиотеку, либо просто жестко закодировать цикличность в своем коде чтения.

(Черт, вы могли бы просто использовать Queue<T> и удалять элементы по мере необходимости ... который использует внутренний буфер, я полагаю.)

...