我正在尝试迭代可能嵌套的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)没有帮助。
答案 0 :(得分:1)
鉴于start元素的id,你可以找到它的下一级foo。
./descendant::foo[ancestor::foo[1]/@id='3']
答案 1 :(得分:0)
从正忙于遍历的集合/枚举中删除项目时的最佳方法是将键/引用加载到单独的列表中,并在完成遍历后将其删除。