XPath для класса и другие значения атрибутов вместе? - PullRequest
0 голосов
/ 29 августа 2018

ЧАСТЬ A

Я бы хотел выбрать элемент HTML по значениям его атрибутов. Я хотел бы иметь возможность сопоставить все атрибуты.

То есть элемент <a> со следующими атрибутами, например:

'href' => "https://twitter.com/JSTOR"
'target' => "_blank"
'class' => "icon-twitter twitter-styling icon-large"
'aria-label' => "Twitter - This link opens in a new window"

Это так: // a [@href = 'https://twitter.com/JSTOR' AND @target =' _ blank 'AND @ class =' ​​icon-twitter twitter-styling icon-large '...

Так что, если у меня есть n атрибутов, мне нужно n-1 "И"?

ЧАСТЬ B

Также стоит отметить несколько значений в «классе». Могу ли я просто иметь @ class = 'classA classB classC' или я должен @ class = 'classA' AND @ class = 'classB' AND @ class = 'classC'?

ЧАСТЬ C

Наконец, для нескольких значений в "классе" имеет значение порядок ? Если в теге указан «classA classB» и мы используем xpath // a [@ class = 'classB classA', будет ли он совпадать?

** Обратите внимание, мне нужен ответ для XPath 1.0

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Этот XPath иллюстрирует все концепции вашего вопроса из трех частей:

//a[contains(concat(' ',@class,' '), ' classA ')]
   [contains(concat(' ',@class,' '), ' classB ')]
   [contains(concat(' ',@class,' '), ' classC ')]
   [@href='https://twitter.com/JSTOR']
   [@target='_blank']

Примечания:

  • Тесты @class предотвращают совпадение classA classAnt.
  • Вы можете использовать and, чтобы объединить ваши условия в одном предикате, а не в составных предикатах.
0 голосов
/ 29 августа 2018

Так что, если у меня есть n атрибутов, мне нужно n-1 "И"?

Да.

Могу ли я просто иметь @class='classA classB classC'

Можно, но для этого потребуется точное совпадение, включая пробелы и порядок

Наконец, для нескольких значений в "классе" имеет значение порядок?

Имеет значение, если вы делаете совпадение равенства. Есть способы обойти это, см этот ответ

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