我想出了这一点:
鉴于一些示例XML:
def xml = """<foo attribute1="value1" attribute2="value2">
<nestedFoo>
sampleText
</nestedFoo>
</foo>"""
然后,我们可以分析它使用XmlParser
,并通过节点的工作,写数据到一个作家
def s = new XmlParser().parseText(xml)
// Closure for writing the xml to a writer as Groovy
// builder style code
def dumpNode
dumpNode = { node, writer, indent = ' ' ->
// Contents of the node, followed by the attributes
def attrs = node.text()?.trim()
attrs = attrs ? [ "'$attrs'" ] : []
attrs = node.attributes().inject(attrs) { a, v ->
a << "$v.key:'$v.value'"
}.join(', ')
// write out the method definition
writer << "${indent}${node.name()}($attrs)"
writer << ' {\n'
node.children().each {
if(it instanceof Node) dumpNode(it, writer, " $indent")
}
writer << "$indent}\n"
}
def sw = new StringWriter()
sw << 'println new StringWriter().with { out ->\n'
sw << ' new groovy.xml.MarkupBuilder(out).with { smb ->\n'
dumpNode(s, sw)
sw << ' }\n'
sw << ' out.toString()\n'
sw << '}\n'
println sw
运行此代码打印出:
println new StringWriter().with { out ->
new groovy.xml.MarkupBuilder(out).with { smb ->
foo(attribute1:'value1', attribute2:'value2') {
nestedFoo('sampleText') {
}
}
}
out.toString()
}
然后,如果你运行在Groovy中,您可以:
<foo attribute1='value1' attribute2='value2'>
<nestedFoo>sampleText</nestedFoo>
</foo>
你想从XML转换为一个Groovy脚本,将生成xml时运行? –