我提前为新手问题道歉,但现在是。假设我正在尝试使用Groovy的NodeBuilder
生成标记。我想写下面的内容:
nodes = {
'element'(key:'value')
'element'(blah:'123')
}
def createMarkup(additionalElements) {
def result = new groovy.xml.MarkupBuilder().root{
someElement(){
element(y: 'uh oh')
additionalElements() // does not work this way!
element(z: 'yeah')
}
}
}
createMarkup(nodes)
导致:
<root>
<someElement>
<element y='uh oh' />
<element z='yeah' />
</someElement>
</root>
简而言之,我要做的是拥有一个(或多个)外部定义的闭包,我可以将其传递给createMarkup()
,然后粘贴在树中的正确位置,即,我希望它产生这个:
<root>
<someElement>
<element y='uh oh' />
<element key='value' />
<element blah='123' />
<element z='yeah' />
</someElement>
</root>
我怎样才能做到这一点?
答案 0 :(得分:1)
找到解决方案:
nodes = { builder ->
builder.element(key:'value')
builder.element(blah:'123')
}
def createMarkup(additionalElements) {
def builder = new groovy.xml.MarkupBuilder()
def result = builder.root{
someElement(){
element(y: 'uh oh')
additionalElements(builder)
element(z: 'yeah')
}
}
}
createMarkup(nodes)
按预期工作。
答案 1 :(得分:0)
我猜additionalElements
是封闭的。要执行它,您应该写:
additionalElements()
而不是:
additionalElements