使用 GPath 查找具有特定子节点的 XML 个节点

Find XML node with a specific child using GPath

我正在寻找 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 元素,其中包含具有属性 price 和文本 [=18= 的 td 元素].

在 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::*

在这个确切的场景中它会做,但我不是父斧头的忠实粉丝。假设会有更多的子节点级别,我将如何处理 "nested" 谓词? Return 一个有子节点的节点有子节点...?

非常感谢!

您可以使用 tr 作为查找的根,并使用深度优先 属性 ** 来搜索整个子树

xmlDoc.tr.find { tr -> tr.'**'.find { it.name() == 'td' && it.text() == '1' } }