我想出了這一點:
鑑於一些示例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時運行? –