使用Groovy XmlSlurper查找属性的最大值

使用Groovy XmlSlurper查找属性的最大值,xml,groovy,xmlslurper,gpath,Xml,Groovy,Xmlslurper,Gpath,给定xml: <d> <r1 dt="2011-06-10"> <r11 dt="2012-07-10" /> <r12 rdt="2011-10-11"> <r121 dt="2010-05-13" /> </r12> </r1> <r2> <r21 dt="2011-10-10"&

给定xml:

<d>
    <r1 dt="2011-06-10">
        <r11 dt="2012-07-10" />
        <r12 rdt="2011-10-11">
            <r121 dt="2010-05-13" />
        </r12>
    </r1>
    <r2>
        <r21 dt="2011-10-10"><n2 ddt="2012-11-31"/>dt</r21>
        <r22 dt="2013-07-10"><n2 ddt="2013-06-31"/>dt</r22>
        <r23 dt="2014-06-10"><n2 ddt="2014-03-31"/>dt</r23>
        <r24 dt="2015-06-10"><n2 ddt="2011-10-31"/>dt</r24>
    </r2>
</d>

dt
dt
dt
dt

我需要在属性
dt
rdt
ddt
中使用Groovy XmlSlurper查找具有最大日期的值。在给定的示例中,它将是
2015-06-10
。假设xml树结构和深度未知(不同)。是否可以使用
onliner
,或者我应该在代码中进行一些迭代?

假设
s
是包含xml的字符串:

def x = new XmlSlurper().parseText(s)
然后,这将获得所有
dt
属性值的列表

def list = x.depthFirst().findAll { it.@dt != "" }​.collect {it.@dt}​​​
您可以使用类似的代码位来获取所有
rdt
ddt
的列表。将它们全部放在一个列表中,然后只获取最大值即可:

list.max { a, b -> 
    new Date().parse("yyyy-MM-dd", a.toString()) <=> new Date().parse("yyyy-MM-dd", b.toString())
} ​
list.max{a,b->
新日期().parse(“yyyy-MM-dd”,a.toString())新日期().parse(“yyyy-MM-dd”,b.toString())
} ​

您在编写
l.max
时可能是指
list.max
?无论如何,谢谢,一切都很顺利。@lospejos哈哈,是的,我在groovy控制台中使用了一个字母vars进行测试,然后决定重命名它们作为答案。我想我错过了,干杯!如果我不仅需要最大日期值(不是普通字符串),还需要引用包含此最大日期值属性的父节点,请提供代码,好吗?这里的列表将是slurpers属性类()的实例列表。所以,如果你想让家长说第一个,你可以做
list[0].parents()
。哇哦。嗯,
parent()
似乎起作用了<代码>列表[0]。父项()​.姓名()​给我
r1