Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找XML节点相对于匹配另一个节点值的值_Xml_Groovy - Fatal编程技术网

查找XML节点相对于匹配另一个节点值的值

查找XML节点相对于匹配另一个节点值的值,xml,groovy,Xml,Groovy,我有以下XML文件: <0> <title>The Little Hours</title> <year>2017</year> <imdbid>tt5666304</imdbid> <scid>10080</scid> </0> <1> <title>CarGo</title>

我有以下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>
fn10076


这仅返回所有4个节点的标题。使用
的值,我如何才能找到
标记的值?

除了小错误之外,您几乎就在那里了
@
用于访问xml元素或节点的
属性
;其中as元素可以直接访问
.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
方法;所以你总是得到一个
标题
,而不是像上面那样的结果

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

您可以在线快速试用。

请检查解决方案,看看是否有帮助。@Dade,没问题。如果这是有帮助的,感谢向上投票&。嘿,对不起,我不得不删除我的评论,因为我不知道它会通过输入按钮提交。我将用我现在的评论补充另一条评论。我直到现在才有时间尝试,所以我的问题是,我的XML文件非常大,超过47000行。因此,我要做的是使用
defxml=newxmlslurper().parse('/file/path/to.xml')
读取xml文件。然后我使用您的代码
println xml.'**'。查找{it.name()=='scid'&&it.text()==fn}.parent().title.text()
,以显示标题。但是,有一个错误/警告是这样说的:
表达式产生空值实体名称必须紧跟实体引用中的“&”
如果有帮助的话,我正在尝试在名为FileBot的软件中使用这段代码。我正在尝试使用重命名多个文件FileBot@Dade,我首先要求您至少尝试一下演示,看看它对您在问题中提供的示例xml是如何工作的。
println xml.'**'.find { it.name() == 'scid' && it.text() == fn}.parent().title.text()