【问题标题】:Groovy - sorting XML elementsGroovy - 对 XML 元素进行排序
【发布时间】:2016-04-20 06:32:00
【问题描述】:

我的目标是按字母顺序对 XML 元素进行排序。我在这里找到了解决方案:Sort elements of arbitrary XML document recursively

部分:

def x = '''<foo b="b" a="a" c="c">
<qwer>
<!-- A comment -->
<zxcv c="c" b="b">Some Text</zxcv>
<vcxz c="c" b="b"/>
</qwer>
<baz e="e" d="d">Woo</baz>
<bar>
<fdsa g="g" f="f"/>
<asdf g="g" f="f"/>
</bar>
</foo>'''

def order( node ) {
[ *:node.attributes() ].sort().with { attr ->
    node.attributes().clear()
    attr.each { node.attributes() << it }
}
node.children().sort()
               .grep( Node )
               .each { order( it ) }
node
}

def doc = new XmlParser().parseText( x )

println groovy.xml.XmlUtil.serialize( order( doc ) )

在 Groovy Web 控制台中,它总是以不同的顺序返回 XML 节点,而不是按字母顺序。我不能使用 XSLT 转换,这可能适用于任何 XML 文档

代码修改有帮助吗?

【问题讨论】:

    标签: xml groovy


    【解决方案1】:

    您可以通过将元素放在列表中来对元素进行排序

    List items = []
    rss.channel.item.each {
       items << it
    }
    
    items.sort {a,b -> a.title.text()) <=> b.title.text())}
    

    这将为您提供按标题排序的元素

    【讨论】:

      【解决方案2】:

      属性存储为 HashMap,因此没有顺序

      他们在 XML 中也没有订单

      所以我认为你不能对它们进行排序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-31
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        相关资源
        最近更新 更多