Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath查询-选择相对顶级节点_Xpath - Fatal编程技术网

XPath查询-选择相对顶级节点

XPath查询-选择相对顶级节点,xpath,Xpath,我试图迭代XML文档中可能嵌套的某些元素,但在迭代这些元素时,可能会从树中删除一些元素。我认为最好的方法是递归地执行此操作,因此我尝试提出一个XPath查询,该查询将选择相对于当前节点的所有顶级节点//foo[notancestor::foo]在文档级别工作得很好,但我正试图从一个相对查询中找出如何做到这一点 <foo id="1"> <foo id="2" /> <foo id="3"> <foo id="4">

我试图迭代XML文档中可能嵌套的某些元素,但在迭代这些元素时,可能会从树中删除一些元素。我认为最好的方法是递归地执行此操作,因此我尝试提出一个XPath查询,该查询将选择相对于当前节点的所有顶级节点//foo[notancestor::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>
如果当前节点是foo3,我只想选择foo4。当当前节点为foo4时,我只想选择foo5和foo7


我想我正在尝试选择当前节点的任何后代foo节点,但在当前节点和我选择的节点之间没有任何祖先foo节点。我的难题是,如果我们已经在一个foo节点中,notancestor::foo就没有帮助了。

从一个集合/枚举中删除您正忙于遍历的项时,最好的方法是将键/引用加载到一个单独的列表中,并在完成遍历后将它们删除。

给定start元素的id,你可以找到它的下一级foo

./descendant::foo[ancestor::foo[1]/@id='3']

你找到答案了吗?我想我找到了一个不同的解决方案。我已经有一年多没有参与这个项目了,所以我不确定我最后做了什么…如何做同样的事情,但不指定id属性,只依赖于当前节点。?