Подтвердить что ты не робот

Запрос Xpath для поиска элементов, которые содержат определенного потомка

Я использую Html Agility Pack для запуска запросов xpath на веб-странице. Я хочу найти строки в таблице, содержащие некоторый интересный элемент. В приведенном ниже примере я хочу получить вторую строку.

<table name="important">
<tr>
  <td>Stuff I'm NOT interested in</td>
</tr>
<tr>
  <td>Stuff I'm interested in</td>
  <td><interestingtag/></td>
  <td>More stuff I'm interested in</td>
</tr>
<tr>
  <td>Stuff I'm NOT interested in</td>
</tr>
<tr>
  <td>Stuff I'm NOT interested in</td>
</tr>
</table>

Я хочу сделать что-то вроде этого:

//table[@name='important']/tr[has a descendant named interestingtag]

За исключением действительного синтаксиса xpath.; -)

Я предполагаю, что я мог бы просто найти интересный элемент, а затем выполнить свой путь вверх по родительской цепочке из возвращаемого node, но казалось, что должен быть способ сделать это за один шаг, и я просто плотно.

4b9b3361

Ответ 1

"имеет потомка named interestintag" пишется .//interestintag в XPath, поэтому выражение, которое вы ищете, это:

//table[@name='important']/tr[.//interestingtag]

Ответ 2

На самом деле вам нужно искать потомка, а не ребенка:

//table[@name='important']/tr[descendant::interestingtag]

Ответ 3

Я знаю, что это не то, о чем спрашивал OP, но если вы хотите найти элемент с потомком с определенным атрибутом, вы можете сделать что-то вроде этого:

//table[@name='important']/tr[.//*[@attr='value']]

Ответ 4

Я знаю, что это поздний ответ, но почему бы не пойти наоборот. Поиск всех тегов <interestingtag/> а затем выберите родительский <tr>.

//interestingtag/ancestor::tr