Ответ 1
"имеет потомка named interestintag" пишется .//interestintag
в XPath, поэтому выражение, которое вы ищете, это:
//table[@name='important']/tr[.//interestingtag]
Я использую 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, но казалось, что должен быть способ сделать это за один шаг, и я просто плотно.
"имеет потомка named interestintag" пишется .//interestintag
в XPath, поэтому выражение, которое вы ищете, это:
//table[@name='important']/tr[.//interestingtag]
На самом деле вам нужно искать потомка, а не ребенка:
//table[@name='important']/tr[descendant::interestingtag]
Я знаю, что это не то, о чем спрашивал OP, но если вы хотите найти элемент с потомком с определенным атрибутом, вы можете сделать что-то вроде этого:
//table[@name='important']/tr[.//*[@attr='value']]
Я знаю, что это поздний ответ, но почему бы не пойти наоборот. Поиск всех тегов <interestingtag/>
а затем выберите родительский <tr>
.
//interestingtag/ancestor::tr