Я ищу выражение GPath, чтобы найти узел с конкретным дочерним элементом.
<table>
<tr>
<td name="line">1</td>
<td name="price">10</td>
</tr>
<tr>
<td name="line">2</td>
<td name="price">95</td>
</tr>
<tr>
<td name="line">3</td>
<td name="price">43</td>
</tr>
</table>
В приведенном выше примере XML я хотел бы получить весь элемент tr
, содержащий элемент td
с атрибутом price
и текст 95
.
В XPath я бы написал что-то вроде этого:
//tr[td[@name='price' and text()='95']]
Код, который я пробовал, и это сработало, выглядело так ...
xmlDoc.tr.td.find { node -> node.text() == '1' }.parent()
... но это было бы больше эквивалентом XPath, чем его:
//tr/td[@name='price' and .='95']/parent::*
В этом точном сценарии это подойдет, но я не большой поклонник материнского топора. Предположим, что уровней дочерних узлов будет намного больше, как я могу использовать «вложенные» предикаты? Вернуть узел, у которого есть дочерний элемент, у которого есть дочерний элемент ...?
Большое спасибо!