Как выбрать родительский узел с XPath? - PullRequest
1 голос
/ 23 сентября 2019

Если у меня есть

<div>
  <a>
    <table>
      <tr>
        <td value="val">

Если я хочу выбрать a, содержащий td с value="val", как я могу это сделать?

Я протестировал:

//td[@value="val"]

Но я получаю узел td, я хочу получить узел a.Как я могу добиться этого с XPath?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Вы можете использовать любой из следующих параметров.

//td[@value="val"]/ancestor::a
^
td with value val
                   ^
                    ancestor link

или

Предпочтительный xpath в этом случае

//a[.//td[@value="val"]]
^
Get me any link which have td with value as val.

или

ниже xpath работает сейчас, но когда на странице появятся какие-либо изменения, например: если таблица будет перемещена в div, то этот xpath сломается.

//td[@value="val"]/parent::tr/parent::table/parent::a

Лично я предпочитаю второй вариант по крайней мере в этом случае как a не имеет особых свойств.И ancestor::a выберет любую ссылку, которая является предком тд.

2 голосов
/ 23 сентября 2019

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

Этот XPath,

//a[.//td/@value = "val"]

выберет все a элементов с потомком td со значением атрибута @value, равным "val".


Обновление: Я не обратил внимания и теперь вижу, что @suppurtui уже предоставил вышеупомянутый XPath в качестве опции.Я оставлю это для любой выгоды, предоставленной моим объяснением, но, пожалуйста, upvote @ supputuri's answer (как я только что сделал).Спасибо.

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