[英]Groovy MarkupBuilder
我有一個東西列表,每個東西都可能是foo或bar。 我想構建一些看起來像這樣的xml:
<rdf:RDF>
<foo id="1">
<foo id="2">
<bar id="3">
</rdf:RDF>
因此,我到此為止:
MarkupBuilder xml = new MarkupBuilder(writer)
xml.'rdf:RDF' (nsmap) { }
但是現在我被困住了。 我如何-在該xml.'rdf:RDF' (nsmap) { }
閉包中-遍歷我的工作清單? 我如何在該迭代器中吐出foo或bar元素(如適用)?
您可能會認為它更簡單。 在xml閉包中包含一個循環,然后在循環中包含標記。 這個腳本...
import groovy.xml.MarkupBuilder
things = ['foo','foo','bar']
writer = new StringWriter()
xml = new MarkupBuilder(writer)
xml.'rdf:RDF' {
things.eachWithIndex {thing,index ->
"$thing" id:index+1
}
}
println writer
...將產生以下輸出:
<rdf:RDF>
<foo id='1' />
<foo id='2' />
<bar id='3' />
</rdf:RDF>
干得好:
import groovy.xml.MarkupBuilder
import org.custommonkey.xmlunit.*
def data = [foo:1,bar:2,baz:3]
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.'rdf:RDF' {
data.each { e ->
"$e.key"(id:e.value)
}
}
println writer
好。
問題是,當閉合由構建器運行時,它在構建器的上下文中運行。 現在,事實證明構建器上下文隱藏方法,但不隱藏變量。 這意味着您可以創建一個閉包,將其分配給變量,然后從構建器中對其進行訪問。
現在,我得到的印象是,這種關閉方式也可以在構建器的上下文中運行。 但我懷疑您可以將“ this”分配給閉包外部的變量,然后訪問該變量以獲取上下文。
您必須去解決這種麻煩,這很荒謬。 我想起了90年代Microsoft Access中的編碼。 效果很好,直到您想要做的事情比嚴格設計的要多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.