[英]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.