XPath Query - выбор относительных узлов верхнего уровня - PullRequest
2 голосов
/ 31 марта 2010

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

Ответы [ 2 ]

1 голос
/ 31 марта 2010

Учитывая идентификатор начального элемента, вы можете найти его следующий уровень foo.

./descendant::foo[ancestor::foo[1]/@id='3']
0 голосов
/ 31 марта 2010

Лучший подход при удалении элементов из коллекции / перечисления, для которых вы заняты обходом, - это загрузить ключи / ссылки в отдельный список и удалить их, как только вы закончите обход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...