XPath - Выберите первый элемент после некоторого другого элемента

debug_backtrace() детали предоставлений параметров, функции/вызовов метода в текущем стеке вызовов.

44
задан cxw 18 June 2015 в 16:17
поделиться

3 ответа

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

Например, вы могли бы сделать:

//a[text()='second dropdown menu']/following::ul[1]/li/a[text()='link i want to find']

это выберет любую привязку с определенным текстом внутри, найдет следующую ul, а затем перейдет к ее дочерним элементам.

Также вы можно указать позиционный индекс в наборе результатов, следующий XPath является демонстрацией (но он не решит вашу проблему):

//a[text()='first dropdown menu']/ul/li[last()]/a/text()

или вы можете использовать оси для навигации между братьями и сестрами / предками / дочерними элементами:

//a[ancestor::ul/preceding::a[1]/text() = 'second dropdown menu']/text()

Итак, я не уверен, что правильно понял ваш вопрос, но это должно помочь вам написать XPath.

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

70
ответ дан 26 November 2019 в 22:08
поделиться

, просто чтобы я правильно понял: вам нужна "какая-то ссылка "узел после" второго раскрывающегося меню "

ul[preceding::a[text()='second dropdown menu' and position()=last()]]/li/a[text()='link i want to find']

, это должно помочь (я не уверен на 100%, что вам нужно будет проверять position () = 1, но я думаю, что если вы его опустите, оно будет соответствовать все следующие ul, так как предыдущее - "все"

5
ответ дан 26 November 2019 в 22:08
поделиться

Поправьте меня, если я ошибаюсь - вам нужно выбрать «второе выпадающее меню» из примера выше, но текст может дублироваться, поэтому вам нужен только второй. XPath:

//a[text()='second drop down menu'][2]
0
ответ дан 26 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: