Groovy>;嵌套映射到Xml
我想在Groovy中将我的Groovy>;嵌套映射到Xml,xml,groovy,Xml,Groovy,我想在Groovy中将我的Map对象转换为Xml。我已经查看了当前的示例,我认为这会更简单 我找到的所有样本,要么使用,要么使用。最可恶的 有什么我遗漏的吗?我可以转换这些其他格式足够简单 JsonOutput.prettyPrint(JsonOutput.toJson(map))//json (映射为ConfigObject).writeTo(新的StringWriter())//groovy 新Yaml().dump(映射,新StringWriter())//yml 为什么我不能这么做 X
Map
对象转换为Xml。我已经查看了当前的示例,我认为这会更简单
我找到的所有样本,要么使用,要么使用。最可恶的
有什么我遗漏的吗?我可以转换这些其他格式足够简单
JsonOutput.prettyPrint(JsonOutput.toJson(map))//json
(映射为ConfigObject).writeTo(新的StringWriter())//groovy
新Yaml().dump(映射,新StringWriter())//yml
为什么我不能这么做
XmlUtil.serialize(映射)
(或者如何将我的映射
对象强制转换为元素
/节点
/GPathResult
/可写
对象?)
Groovy示例代码
def myMap=[
键1:‘值1’,
键2:‘值2’,
关键3:[
键1:‘值1’,
键2:‘值2’,
关键3:[
键1:‘值1’,
键2:‘值2’,
]
]
]
优先输出
价值1
价值2
价值1
价值2
价值1
价值2
您可以执行以下操作:
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>
价值1
价值2
价值1
价值2
价值1
价值2
我不知道有什么神奇的方法可以调用(可能是由于属性的原因,在不知道所需的输出结构的情况下没有神奇的映射->xml转换)注意:您需要在collect中添加
if(v)
,或者在yield中添加if(v)
:“null”,以避免元素具有空值时出现错误。