Два уровня содержимого в XPath

#xpath #contains

#xpath #содержит

Вопрос:

У меня есть этот XPath:

 //tr[contains(td, 'Europe')]
  

который работал, когда у меня было это:

 <tr>
  <td></td>
  <td>Europe</td>
  <td></td>
</tr>
  

но теперь у меня есть это:

 <tr>
  <td></td>
  <td><a>Europe</a></td>
  <td></td>
</tr>
  

Как я могу получить доступ к XPath сейчас (исходя из того факта, что Европа находится там).

Я пытался:

 //tr[contains(a, "Europe")]
  

и

 //tr[contains(text(), "Europe")]
  

и многие другие глупости без какого-либо успеха.

Ответ №1:

 //tr[contains(td, 'Europe')]
  

Это должно работать с обеими схемами, потому что fn:contains() приводит оба аргумента к строкам.

Я вижу проблему с другой схемой, где может быть более одного td элемента. В этом случае вам следует использовать:

 //tr[td[contains(.,'Europe')]]
  

Комментарии:

1. Да, там есть еще tds, я исправлю вопрос, спасибо за ответ.

2. Вы можете захотеть .//tr[td[содержит(.,’Europe’)]] если есть какой-либо шанс, что это также может совпадать вне контекстного узла.