我想在Groovy中将我的Map
对象转换为Xml。我已经浏览了当前的例子,我认为这会更简单!
我找到的所有样本都使用a MarkupBuilder
to manually specify the fields或have a utility method到iterate over the tree。最令人发指的!
我有什么遗失的东西吗?我可以简单地转换这些其他格式......
JsonOutput.prettyPrint(JsonOutput.toJson(map)) // json
(map as ConfigObject).writeTo(new StringWriter()) // groovy
new Yaml().dump(map, new StringWriter()) // yml
为什么我不能这样做?
XmlUtil.serialize(map)
(或如何将Map
对象投射到Element
/ Node
/ GPathResult
/ Writable
对象?)
def myMap = [
key1: 'value1',
key2: 'value2',
key3: [
key1: 'value1',
key2: 'value2',
key3: [
key1: 'value1',
key2: 'value2',
]
]
]
<root>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
</key3>
</key3>
</root>
答案 0 :(得分:7)
你可以这样做:
import groovy.xml.*
new StringWriter().with { sw ->
new MarkupBuilder(sw).with {
root {
myMap.collect { k, v ->
"$k" { v instanceof Map ? v.collect(owner) : mkp.yield(v) }
}
}
}
println sw.toString()
}
输出:
<root>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
</key3>
</key3>
</root>
你可以调用我没有意识到的神奇方法(可能是因为属性,没有神奇的地图 - &gt; xml转换可以在不知道所需的情况下完成输出结构)