我需要使用groovy来转换具有相同键的XML
<Root>
<firstname>abc </firstname>
<firstname>bcd </firstname>
<lastname>abf </lastname>
</Root>
为了映射,我希望有类似的东西:
[firstname:{"abc , bcd"} , lastname:"abf"]
提前致谢!!
答案 0 :(得分:1)
可能有很多方法可以做到这一点。假设你的xml只有一个级别(如你的例子中所示),你可以这样做:
def xml = '''<Root>
<firstname>abc </firstname>
<firstname>bcd </firstname>
<lastname>abf </lastname>
</Root>'''
new XmlSlurper().parseText(xml)
.children()
.groupBy { it.name() }
.collectEntries { k, v -> [k, v*.text()*.trim().join(', ')] }
如果您的xml更深,那么问题很快变得非常重要,您将不得不做出一些关于您要做什么的决定...... XML可以容纳比地图更多的数据
所以你可以尝试这样的事情来进行更加随意的处理:
给出表格中的xml:
def xml = '''<Root>
<firstname>abc </firstname>
<firstname>bcd </firstname>
<lastname>abf </lastname>
<adresse> <ville>aaa</ville><ville>eeee</ville><pays>ffff</pays></adresse>
</Root>'''
然后用:
处理它new XmlSlurper().parseText(xml).with { node ->
node.children()
.groupBy { it.name() }
.collectEntries { k, v ->
[k, v.any { it.children().size() } ?
v.collect(owner) :
v*.text()*.trim().join(', ')]
}
}
应该给你输出:
['firstname':'abc, bcd', 'lastname':'abf', 'adresse':[['ville':'aaa, eeee', 'pays':'ffff']]]