XmlReader.ReadSubTree并且不按顺序读取Xml

时间:2013-07-17 09:58:51

标签: c# filestream saxparser xmlreader

我有一个需要高效阅读的大型Xml文件。我不能马上将整个东西拉进记忆中。但是,我还需要对其进行有限数量的无序处理,因此仅按顺序读取一次也不起作用。我希望我可以使用XmlReader创建一个新的XmlReader.ReadSubTree(),使用原始阅读器跳到下一个兄弟元素,继续解析,然后返回并使用新阅读器阅读子树。

然而,这似乎不起作用。看起来你创建的新XmlReaders都使用相同的底层流,所以推进它们会推进所有这些。

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

我很乐意按顺序解析Xml两次(我没有看到任何方式),但我不想n次,理想情况下代码应该整洁可维护

概念上:

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

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

0 个答案:

没有答案