首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy MarkupBuilder

Groovy MarkupBuilder
EN

Stack Overflow用户
提问于 2014-05-06 14:43:47
回答 3查看 1.2K关注 0票数 0

我有一个东西的列表,每个东西都可能是foo或bar。我想构建一些如下所示的xml:

代码语言:javascript
复制
<rdf:RDF>
  <foo id="1">
  <foo id="2">
  <bar id="3">
</rdf:RDF>

所以我已经做到了这一点:

代码语言:javascript
复制
MarkupBuilder xml = new MarkupBuilder(writer)
  xml.'rdf:RDF' (nsmap) { }

但现在我被卡住了。如何在xml.'rdf:RDF' (nsmap) { }闭包中迭代我内容列表?如何在迭代器中根据需要输出foo或bar元素?

EN

回答 3

Stack Overflow用户

发布于 2014-05-06 15:55:52

这就是了:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-05-06 16:03:27

它可能像你想的那样简单。在xml闭包中包含一个循环,然后在该循环中包含标记。这个脚本..。

代码语言:javascript
复制
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

..。将产生以下输出:

代码语言:javascript
复制
<rdf:RDF>
  <foo id='1' />
  <foo id='2' />
  <bar id='3' />
</rdf:RDF>
票数 2
EN

Stack Overflow用户

发布于 2014-05-06 16:04:03

好的。

问题是,当闭包由构建器运行时,它在构建器的上下文中操作。现在,事实证明构建器上下文隐藏了方法,但不隐藏变量。这意味着您可以创建一个闭包,将其分配给一个变量,并从构建器中访问它。

NOw,我的印象是这个闭包也在构建器的上下文中运行。但我怀疑您可以将"this“赋给闭包外部的变量,然后访问该变量以获取上下文。

你非得这么麻烦不可,这太可笑了。我想起了90年代微软Access中的编码,它工作得很好,直到你想做比它严格设计的更多的事情的时候。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23487646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档