我有一个需要高效阅读的大型Xml文件。我不能马上将整个东西拉进记忆中。但是,我还需要对其进行有限数量的无序处理,因此仅按顺序读取一次也不起作用。我希望我可以使用XmlReader
创建一个新的XmlReader.ReadSubTree()
,使用原始阅读器跳到下一个兄弟元素,继续解析,然后返回并使用新阅读器阅读子树。
然而,这似乎不起作用。看起来你创建的新XmlReaders
都使用相同的底层流,所以推进它们会推进所有这些。
但是,如果阅读器底层的流支持搜索(如文件流那样),那么这应该是可能的。
我很乐意按顺序解析Xml两次(我没有看到任何方式),但我不想n
次,理想情况下代码应该整洁可维护
概念上:
n
(非交叉)子树的开始和结束偏移。x_1
x_n
如果我可以寻找(到已知的文件偏移量),那么Parse2作为一个整体不再涉及比Parse1更多的Xml读数 - 因此我正在读取整个文件两次。如果我不能寻求,那么我想我正在阅读n/2
次的整个文件。