Как выбрать два разных тега через xpath, оба на разных уровнях, если один из них не является обязательным - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть ситуация, когда данные представляют собой смесь этих форматов на одной странице. Другими словами, некоторые строки будут отображаться как:

some lengthy XPATH_X uptill here:
<td/>
<td>
   I Need this element td
</td>
<td/>
<td/>
<td/>
<td/>

и несколько других строк будут отображаться в этом формате:

the same lengthy XPATH_X uptill here:
<td/>
<td>
    <span>
        I Need this element span
    </span>
</td>
<td/>
<td/>
<td/>
<td/>

Обратите внимание, что для каждого из тегов td нет дифференцирующих атрибутов. Мне нужно выбрать второй ряд (тд) в обоих случаях.

Я пытаюсь поймать оба элемента, используя следующий xpath:

XPATH_X/*[self::td[position()=2] or self::td[position()=2]/span]

Я попробовал это на странице, но по какой-то причине он ничего не выбирает.

Может кто-нибудь помочь мне с этим? Я уже потратил на это более 2 часов.

1 Ответ

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

Вы должны попробовать XPATH_X/td[2]//text(), чтобы получить текст, находится ли он в корне td или в дочернем теге

Вы можете проверить это здесь ; В этом тесте я получаю три результата:

  • текст внутри span внутри td
  • текст в корне td
  • как тексты в корне td, так и внутри вложенного span (если это не работает для вас, и текст td следует извлекать только при отсутствии span, используйте XPATH_X/td[position()=2 and not(./span)]/text() | XPATH_X/td[2]/span/text() вместо)

Чтобы получить элементы, содержащие текстовые узлы, а не сами текстовые узлы, вы можете использовать следующее:

XPATH_X/td[2]//self::node()[text()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...