Xpath - возможно ли использовать более одной оси на запрос? - PullRequest
0 голосов
/ 05 марта 2019
.//*[preceding::*[text()='Taco Salad'] and following::*[text()='Fajita Salad']]

У меня есть текст на этой странице, и оба запроса для .//*[text()='Taco Salad'] и .//*[text()='Fajita Salad'] возвращают то, что я ожидал.Но я немного сбит с толку, как попытаться объединить их со следующими и предшествующими, чтобы получить некоторые узлы опций, которые присутствуют в середине.

У кого-нибудь есть какие-нибудь рабочие примеры использования двух осей?

Я нашел эту ветку: , объединяющую оси XPATH (предыдущий и последующий братья и сестры) и попытался смоделировать свои оси после нее, но они не являются действительными xapths.Я что-то упускаю из виду?

Ответы [ 2 ]

1 голос
/ 05 марта 2019

К сожалению, вы на самом деле не сказали нам, чего хотите достичь.Да, вы можете использовать несколько осей;Вы можете комбинировать их по-разному, в зависимости от того, какой результат вы хотите.Поэтому вам нужно объяснить, какой результат вы хотите.Использование «и» на верхнем уровне просто проверяет, выбирают ли оба операнда «и» что-то.

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

Вот несколько возможных способов объединения двух осевых шагов X и Y:

X / Y - выберите X, а оттуда выберите Y

X и Y - верните true, если X и Y что-то выберут

X или Y - верните true, если X или Y выберетчто-то

X |Y - возвращает объединение того, что X и Y выбирают

X пересекаются Y - возвращает пересечение того, что X и Y выбирают

Ближайшее, что вы пришли к утверждению о требованиях:варианты узлов, которые присутствуют в середине ".Это трудно интерпретировать, не видя ваш исходный документ.Это также может оказаться запросом, который проще в XPath 2.0, чем в 1.0, поэтому вам действительно нужно сообщить нам, какую версию вы используете.

0 голосов
/ 10 марта 2019

Рабочий пример объединения осей в одном xpath может быть:

//*[following-sibling::*[@class="bottom-notice"] and preceding-sibling::*[@name="new-answer"]]

Ищет элемент form, чтобы написать ответ на этой странице.

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