2

给定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>

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

4

1 回答 1

2

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

def x = new XmlSlurper().parseText(s)

然后这将为您提供所有dt属性值的列表

def list = x.depthFirst().findAll { it.@dt != "" }​.collect {it.@dt}​​​

您可以使用类似的代码来获取所有rdtddt. 将它们全部放入一个列表中,然后获得您可以执行的最大值:

list.max { a, b -> 
    new Date().parse("yyyy-MM-dd", a.toString()) <=> new Date().parse("yyyy-MM-dd", b.toString())
} ​
于 2016-08-02T13:22:06.013 回答