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

时间:2010-03-30 22:19:48

标签: xpath

我正在尝试迭代可能嵌套的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 个答案:

答案 0 :(得分:1)

鉴于start元素的id,你可以找到它的下一级foo。

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

答案 1 :(得分:0)

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