我有以下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>
代码的值?
答案 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