Как я могу выбрать элемент, используя xpath, который имеет 2 X 2 вида структуры? - PullRequest
0 голосов
/ 13 ноября 2018

Вот как выглядит замечательная HTML-таблица в Confluence:

<tr>
  <td> key1
  </td>

  <td> key2
  </td>

  <td> value1
  </td>

  <td> value2
  </td>
</tr>

Мне нужен xpath, который может идентифицировать строку на основе key1 + key2.

Это было бы легко само по себе, верно? Теперь вот сложность с слиянием:

Каждая строка может содержать значение непосредственно внутри td или иметь td> span тег, который будет содержать значение.

Другими словами, каждая строка может быть в любом из следующих форматов:

<td> text
</td>

OR

<td>
  <span>
    text
  </span>
</td>

Вот где я сейчас нахожусь:

(//tr[descendant::td[text()='key1' or descendant::span[text()='key1'] ] and descendant::td[text()='key2' or descendant::span[text()='key2'] ]])

Это не работает. Ничего не ловит.

PS: Я не потратил полдня, пытаясь схватить разные строки! Реальная проблема не только в этом, но я решил вторую половину. Выбор строки не работает.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я решил это! О боже, я не могу поверить, что я решил это после нескольких часов. На самом деле это очень простое решение! :)

//*[text() = 'key1']/ancestor::tr[descendant::*[text() = 'key2']]

Это выбирает строку в соответствии с логическим выражением {(td = key1 ИЛИ td / span = key1) && (td = key2 ИЛИ td / span = key2))

0 голосов
/ 13 ноября 2018

Попробуйте под XPath сопоставить строку по значениям двух ячеек :

//tr[normalize-space(td)="key1" and normalize-space(td[2])="key2"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...