2014-01-09 61 views
1

我爲新手問題提前道歉,但在這裏。假設我正在嘗試使用Groovy的NodeBuilder生成標記。我想寫點東西像下面這樣: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> 

概括地說,我想要做的就是有一個(或多個)外部定義關閉(S)我可以通過我的createMarkup(),然後粘在樹上合適的水平,即,我想它產生這樣的:

<root> 
    <someElement> 
    <element y='uh oh' /> 
    <element key='value' /> 
    <element blah='123' /> 
    <element z='yeah' /> 
    </someElement> 
</root> 

我怎樣才能做到這一點?

回答

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) 

按預期工作。

0

我猜additionalElements已關閉。要執行它,你應該寫:代替

additionalElements() 

additionalElements