You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:00:58