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

Я'м новичок в XPath, можно было возиться с ним в течение нескольких часов сейчас, поэтому я'м не совсем уверен, если вы даже можете делать нечто вроде следующего с ним.

Ладно, здесь'ы сценария: я хочу найти ссылку со страницы. Эта ссылка только узнать по его'текстовых значение S, т. е.. текст между &ЛТ;а&ГТ; теги (&ЛТ;а href=на"#" и&АМП;ГТ;ссылке&ЛТ;а&ГТ;). До сих пор я'ве удалось получить мои руки На, чтобы связать элементы с текстом, единственная проблема заключается в том, что там'ы несколько таких валяется.

Эти ссылки нашла из неупорядоченные списки, которые будут предшествовать еще одна ссылка-тег, который будет служить очень хороший и"Якорь" в точку, чтобы начать искать последний элемент, который я хочу найти (т. е. тогда я мог бы просто согласиться с первым играм)

Чтобы прояснить вещи немного, здесь'ы пример того, что'ы происходит:

<a href="#">first dropdown menu</a>
<ul>
  <li><a href="#">some link</a></li>
  <li><a href="#">link i want to find</a></li>
</ul>

<-- *And i would actually want to find the thing from this list* --> 
<a href="#">second dropdown menu</a>
<ul>
  <li><a href="#">some link</a></li>
  <li><a href="#">link i want to find</a></li>
</ul>

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

Редактировать: На вопрос уже ответили, но есть некоторые замечания, которые я хотел указать немного больше, так что люди могли понять вопрос ;)

Идея состояла в том, чтобы использовать элемент, чтобы указать местоположение другого элемента, который мог бы дублировать Результаты поиска разбросанных по всему документу.

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

Что'ы в основном это. Я знаю, что это's все еще немного трудно понять, но, к сожалению, я'м, имея трудное время, пытаясь объяснить это лучше. Я'м уверена, что кто-то может сделать работу лучше, и если это произойдет, я'м более чем счастлив, чтобы включить это описание здесь.

Комментарии к вопросу (1)
Решение

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

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

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

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

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

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

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

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

Поэтому я'м не уверен, что вполне понял ваш вопрос, но это должно помочь вам написать ваш XPath-выражения.

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

Комментарии (0)

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

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

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

Комментарии (4)

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

//a[text()='second drop down menu'][2]
Комментарии (2)