0

我正在寻找一个 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和 text的元素的整个元素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::*

在这种确切的情况下,它会做,但我不是父斧的忠实粉丝。假设会有更多的子节点级别,我将如何处理“嵌套”谓词?返回一个具有子节点的节点...?

非常感谢!

4

1 回答 1

1

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

xmlDoc.tr.find { tr -> tr.'**'.find { it.name() == 'td' && it.text() == '1' } }
于 2019-06-11T13:43:38.210 回答