我有一个东西的列表,每个东西都可能是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元素?
发布于 2014-05-06 15:55:52
这就是了:
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发布于 2014-05-06 16:03:27
它可能像你想的那样简单。在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>发布于 2014-05-06 16:04:03
好的。
问题是,当闭包由构建器运行时,它在构建器的上下文中操作。现在,事实证明构建器上下文隐藏了方法,但不隐藏变量。这意味着您可以创建一个闭包,将其分配给一个变量,并从构建器中访问它。
NOw,我的印象是这个闭包也在构建器的上下文中运行。但我怀疑您可以将"this“赋给闭包外部的变量,然后访问该变量以获取上下文。
你非得这么麻烦不可,这太可笑了。我想起了90年代微软Access中的编码,它工作得很好,直到你想做比它严格设计的更多的事情的时候。
https://stackoverflow.com/questions/23487646
复制相似问题