代码之家  ›  专栏  ›  技术社区  ›  Zephyr was a Friend of Mine

如何使用XmlReader读取XML文档的最后N个元素?

  •  1
  • Zephyr was a Friend of Mine  · 技术社区  · 15 年前

    假设我有这个:

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

    如何读取最后五个子元素?由于文件太大,无法使用XElement.解析(…)等。需要使用XmlReader将文件作为流读取。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jon Skeet    15 年前

    您可以保留一个循环缓冲区—在解析时将每个元素添加到缓冲区中(因为您不会解析整个内容,所以需要 使用 XElement.Load 将读取器放置在元素的开头),并在读取新元素时丢弃旧元素。您将创建大量垃圾,但如果幸运的话,大部分垃圾都将在gen0中,因此不会引起太多问题。

    我不知道在主框架中有什么循环缓冲区类,但是您可以自己编写一个通用缓冲区类,或者找到第三方库,或者在您的阅读代码中硬编码循环性。

    (见鬼,你 Queue<T> 并根据需要将元素出列。。。在内部使用循环缓冲区,我相信。)