使用GPath

时间:2019-06-11 13:37:15

标签: xml xpath groovy 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元素,其中包含一个具有属性td和文本price的{​​{1}}元素。

在XPath中,我将编写如下内容:

95

我尝试过并能正常工作的代码看起来像这样...

//tr[td[@name='price' and text()='95']]

...但是那将更像XPath一样:

xmlDoc.tr.td.find { node -> node.text() == '1' }.parent()

在这种情况下,它确实可以,但是我不是父斧头的忠实拥护者。假设会有更多的子节点级别,我该如何处理“嵌套”谓词?返回一个有孩子的节点,有孩子...?

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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