我试图迭代可能嵌套的XML文档中的一些元素,但是当我迭代它们时,我可能会从树中删除一些元素 . 我认为最好的方法是递归地执行此操作,因此我尝试提出一个XPath查询,它将选择相对于当前节点的所有顶级节点 . // foo [not(ancestor :: foo)]在文档级别工作得很好,但我试图弄清楚如何从相对查询中做到这一点 .
<foo id="1">
<foo id="2" />
<foo id="3">
<foo id="4">
<bar>
<foo id="5">
<foo id="6" />
</foo>
<foo id="7" />
</bar>
</foo>
</foo>
</foo>
如果当前节点是foo#3,我只想选择foo#4 . 当前节点是foo#4时,我只想选择foo#5和foo#7 .
我想我正在尝试选择当前节点的任何后代foo节点,但是当前节点和我正在选择的节点之间没有任何祖先foo节点 . 我的难题是如果我们已经在foo节点内,而不是(祖先:: foo)没有帮助 .
2 回答
给定start元素的id,你可以找到它的下一级foo .
从正忙于遍历的集合/枚举中删除项目时的最佳方法是将键/引用加载到单独的列表中,并在完成遍历后将其删除 .