查找与另一个节点值匹配的XML节点的值

时间:2017-10-06 22:02:11

标签: xml groovy

我有以下XML文件:

<0>
    <title>The Little Hours</title>
    <year>2017</year>
    <imdbid>tt5666304</imdbid>
    <scid>10080</scid>
    </0>
    <1>
    <title>CarGo</title>
    <year>2017</year>
    <imdbid>tt6680792</imdbid>
    <scid>10079</scid>
</1>
<2>
    <title>My Little Pony: The Movie</title>
    <year>2017</year>
    <imdbid>tt4131800</imdbid>
    <scid>10078</scid>
</2>
<3>
    <title>Amityville: The Awakening</title>
    <year>2017</year>
    <imdbid>tt1935897</imdbid>
    <scid>10077</scid>
</3>
<4>
    <title>6 Days</title>
    <year>2017</year>
    <imdbid>tt4703048</imdbid>
    <scid>10076</scid>
</4>

我希望能够获得价值&#34; 6天&#34;找到<scid>10076</scid>

这是我到目前为止所拥有的......

{xml = new XmlSlurper().parse(folder/'/mov.xml');
xml.findAll { it.@scid == fn }
}

fn 10076

这只返回所有4个节点的标题。如何使用<title></title>的值找到<scid></scid>代码的值?

1 个答案:

答案 0 :(得分:1)

除了小错误,你几乎就在那里。 @用于访问xml元素或节点的attribute;可以直接访问元素.elementName,如下所示:

使用以下内容实现相同目标:

def fn = '10076'
def xml = new XmlSlurper().parse('/file/path/to.xml')
//Use findAll if you are expecting multiple titles; this returns a list of all titles matching scid is 10076
println xml.'**'.findAll { it.name() == 'scid' && it.text() == fn}*.parent()*.title*.text()

如果您希望scid元素值始终是唯一的,则无需使用findAll;而是使用find方法;所以你总是得到单title,而不是上面的结果。

println xml.'**'.find { it.name() == 'scid' && it.text() == fn}.parent().title.text()

您可以在线快速尝试 demo