使用XPathNodeIterator时如何重置到第一个节点?
解决XPathNodeIterator无法重置到起始位置的问题
XPathNodeIterator是单向只读的迭代器,一旦遍历到节点末尾就无法回溯,也没有内置的重置方法。你遇到的问题正是因为每次循环复用了同一个迭代器,导致后续循环从上次的结束位置继续。
解决方法很直接:每次处理Master节点前,重新生成Source文件的XPathNodeIterator,这样每次都能从第一个节点开始遍历。
修改后的代码如下:
Dim xDocSource As New XPathDocument(sourceFile.Text) Dim xNavSource As XPathNavigator = xDocSource.CreateNavigator() Dim xDocMaster As New XPathDocument(checkFile.Text) Dim xNavMaster As XPathNavigator = xDocMaster.CreateNavigator() Dim xIteratorMaster As XPathNodeIterator = xNavMaster.Select("/MIBVIEW/DATA/ATTRIBUTE") ' 优化循环写法,直接用MoveNext遍历Master节点 While xIteratorMaster.MoveNext() ' 每次循环重新生成Source的迭代器,确保从头开始 Dim xIteratorSource As XPathNodeIterator = xNavSource.Select("/MIBVIEW/DATA/ATTRIBUTE") While xIteratorSource.MoveNext() ' ...process attributes... End While End While
这样每次进入Master节点的循环时,都会重新创建一个指向Source文件第一个ATTRIBUTE节点的迭代器,彻底解决位置残留的问题。
内容的提问来源于stack exchange,提问作者kaza007
相关产品推荐
相关产品推荐

