Groovy GPATH query-返回比较子节点的父节点

Groovy GPATH query-返回比较子节点的父节点,groovy,gpath,Groovy,Gpath,我是新来的。我正在寻找其标记id属性与“4”匹配的所有视频游戏节点 def text='' 3. 测试名称3 2001-03-10T00:00:00Z 41 31 3. 测试名称3 2001-03-10T00:00:00Z 41 31 ''' def videoGames=new XmlSlurper().parseText(文本) def games=视频游戏。视频游戏。“**”。查找{ node->node.name() } println游戏 我可以打印子节点,但尚未成功获取父节点。有指

我是新来的。我正在寻找其标记id属性与“4”匹配的所有视频游戏节点

def text=''
3.
测试名称3
2001-03-10T00:00:00Z
41
31
3.
测试名称3
2001-03-10T00:00:00Z
41
31
'''
def videoGames=new XmlSlurper().parseText(文本)
def games=视频游戏。视频游戏。“**”。查找{
node->node.name()
}
println游戏
我可以打印子节点,但尚未成功获取父节点。有指针吗?

以下代码:

import groovy.xml.*

def text = '''
<videoGames>
    <videoGame category="A">
        <id>3</id>
        <name>testName 3</name>
        <releaseDate>2001-03-10T00:00:00Z</releaseDate>
        <tags attr="true">
           <tag id="4">41</tag>
           <tag id="3">31</tag>
        </tags>
    </videoGame>
    <videoGame category="B">
        <id>3</id>
        <name>testName 3</name>
        <releaseDate>2001-03-10T00:00:00Z</releaseDate>
        <tags attr="true">
           <tag id="3">41</tag>
           <tag id="7">31</tag>
        </tags>
    </videoGame>
</videoGames>
'''
def videoGames = new XmlSlurper().parseText(text)

def games = videoGames.videoGame.findAll { g ->
  g.tags.tag.any { tag -> 
    tag.@id == '4'
  }
}

def xmlString = XmlUtil.serialize(games)
println(xmlString)
导入groovy.xml* 定义文本=“” 3. 测试名称3 2001-03-10T00:00:00Z 41 31 3. 测试名称3 2001-03-10T00:00:00Z 41 31 ''' def videoGames=new XmlSlurper().parseText(文本) def games=videoGames.videoGames.findAll{g-> g、 tags.tag.any{tag-> 标记。@id='4' } } def xmlString=XmlUtil.serialize(游戏) println(xmlString) 运行时将产生以下输出:

─➤ groovy solution.groovy
<?xml version="1.0" encoding="UTF-8"?>
<videoGame category="A">
  <id>3</id>
  <name>testName 3</name>
  <releaseDate>2001-03-10T00:00:00Z</releaseDate>
  <tags attr="true">
    <tag id="4">41</tag>
    <tag id="3">31</tag>
  </tags>
</videoGame>

─➤ groovy解决方案
3.
测试名称3
2001-03-10T00:00:00Z
41
31
(我添加的输出中xml声明后的换行符)

─➤ groovy solution.groovy
<?xml version="1.0" encoding="UTF-8"?>
<videoGame category="A">
  <id>3</id>
  <name>testName 3</name>
  <releaseDate>2001-03-10T00:00:00Z</releaseDate>
  <tags attr="true">
    <tag id="4">41</tag>
    <tag id="3">31</tag>
  </tags>
</videoGame>