Я пытаюсь перебрать некоторые элементы в 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, то (ancestor :: foo) не помогает.