0

我有一个需要有效阅读的大型 Xml 文件。我不能一下子把整件事都记在心里。但是,我还需要对其进行有限数量的乱序处理,因此仅按顺序读取一次是行不通的。我希望我可以创建一个新XmlReader的 with XmlReader.ReadSubTree(),使用原始阅读器跳到下一个兄弟元素,继续解析,然后返回并使用新阅读器读取子树。

但是,这似乎不起作用。看起来XmlReaders您创建的新产品都使用相同的底层流,因此推进一个会推进它们。

但是,如果阅读器底层的流支持搜索(就像文件流一样),这应该是可能的。

我很高兴按顺序解析 Xml 两次(我看不出有什么办法),但我不想这样做n,理想情况下代码应该整洁且可维护。

从概念上讲:

  • Parse1:解析完整的 Xml。不要发出任何东西,但要确定n我想要的(不相交的)子树的开始和结束偏移量。
  • Parse2:读取每个子树,但是读取它们的顺序不是文档顺序。
    • ParseSub(1):寻找,然后读取子树编号x_1
    • ...
    • ParseSub(n):寻找,然后读取子树编号x_n

如果我可以寻找(到一个已知的文件偏移量),那么 Parse2 作为一个整体不涉及比 Parse1 更多的 Xml 读取 - 因此我正在读取整个文件两次。如果我不能寻找,那么我想我正在阅读整个文件的n/2时间顺序。

4

0 回答 0