【问题标题】:Find maximum value of attribute with Groovy XmlSlurper使用 Groovy XmlSlurper 查找属性的最大值
【发布时间】:2016-08-02 12:22:53
【问题描述】:

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

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

【问题讨论】:

    标签: xml groovy xmlslurper gpath


    【解决方案1】:

    假设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())
    } ​
    

    【讨论】:

    • 你可能是指list.maxl.max?无论如何,谢谢,一切都像魅力一样。
    • @lospejos 哈哈,是的,我在 groovy 控制台中使用一个字母 vars 进行测试,然后决定重命名它们以获得答案。我猜我错过了,干杯!
    • 如果我不仅需要最大日期值(不是纯字符串),还需要引用包含此最大日期值属性的父节点,能否提供代码?
    • 这里的列表将是 slurpers 属性类 (docs.groovy-lang.org/latest/html/gapi/groovy/util/…) 的实例列表。所以如果你想让父母说第一个,你可以做list[0].parents()
    • 哇哦。好吧parent() 似乎有效。 list[0].parent()​.name()​ 给我r1
    猜你喜欢
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多