我想Map在Groovy中将我的对象转换为Xml.我已经浏览了当前的例子,我认为这会简单得多!
所有样品我发现,无论是使用一个MarkupBuilder手动指定的字段,或有一个实用的方法来遍历树.最令人发指的!
有什么我想念的吗?我可以简单地转换这些其他格式......
JsonOutput.prettyPrint(JsonOutput.toJson(map)) // json
(map as ConfigObject).writeTo(new StringWriter()) // groovy
new Yaml().dump(map, new StringWriter()) // yml
Run Code Online (Sandbox Code Playgroud)
为什么我不能这样做?
XmlUtil.serialize(map)
Run Code Online (Sandbox Code Playgroud)
(或者我如何将Map对象转换为Element/ Node/ GPathResult/ Writable对象?)
def myMap = [
key1: 'value1',
key2: 'value2',
key3: [
key1: 'value1',
key2: 'value2',
key3: [
key1: 'value1',
key2: 'value2',
]
]
]
Run Code Online (Sandbox Code Playgroud)
<root>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
</key3>
</key3>
</root>
Run Code Online (Sandbox Code Playgroud)
你可以做:
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()
}
Run Code Online (Sandbox Code Playgroud)
要输出:
<root>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key1>value1</key1>
<key2>value2</key2>
</key3>
</key3>
</root>
Run Code Online (Sandbox Code Playgroud)
你知道没有可以调用的神奇方法(可能是因为属性,没有魔术贴图 - > xml转换可以在不知道所需输出结构的情况下完成)