- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Groovy MarkupBuilder 将 map 转换为 XML .此映射可以包含简单的键/值对、其他映射或映射列表。我从代码中搭便车 here .
import groovy.xml.MarkupBuilder
def map = [
key1:'value1',
key2:'value2',
nestedMap : [
key1:'bar1',
key2:'bar2'
],
select : [
[option:'foo1'],
[option:'foo2']
]
]
Closure renderMap( Map map ){
return {
for ( entry in map ){
switch( entry.value.getClass() ){
case Map :
"${entry.key}" renderMap( entry.value )
break
case List:
entry.value.collect { listEntry ->
"${entry.key}" renderMap( listEntry )
}
break
default :
"${entry.key}"( "${entry.value}" )
break
}
}
}
}
StringWriter writer = new StringWriter()
new MarkupBuilder(writer).root renderMap(map)
println writer.toString()
我关心的这部分打印出来:
<select>
<option>foo1</option>
</select>
<select>
<option>foo2</option>
</select>
但是,我想知道是否有办法让 select 封装这两个选项,如下所示:
<select>
<option>foo1</option>
<option>foo2</option>
</select>
我试过摆弄 key 的位置,但无济于事。我是不是做错了,或者我不应该使用构建器?
最佳答案
我想这会做你想做的。前两个重载接受一个映射或集合,并返回一个组合的闭包,该闭包可以传递给封闭元素的构建器方法,以将映射或集合的内容添加到构建器。
第三个是回退,只返回其参数,以便将它们传递给构建器方法。这处理字符串,但如果需要,您也可以将其传递给闭包。作为示例,我替换了您提供的 map 中的第二个 option
元素。
ComposedClosure
在 Groovy 1.8 中添加,因此这在早期版本中不起作用。
import groovy.xml.MarkupBuilder
Closure buildxml(final Map map)
{
final compose = { f, tag, content -> f >> { "$tag"(buildxml(content)) } }
return map.inject(Closure.IDENTITY, compose)
}
Closure buildxml(final Collection col)
{
final compose = { f, content -> f >> buildxml(content) }
return col.inject(Closure.IDENTITY, compose)
}
def buildxml(final content)
{
return content
}
def map = [
key1:'value1',
key2:'value2',
nestedMap : [
key1:'bar1',
key2:'bar2'
],
select : [
[option:'foo1'],
{ option('foo2') },
],
]
final writer = new StringWriter()
final builder = new MarkupBuilder(writer)
builder.root buildxml(map)
assert writer as String == '''\
<root>
<key1>value1</key1>
<key2>value2</key2>
<nestedMap>
<key1>bar1</key1>
<key2>bar2</key2>
</nestedMap>
<select>
<option>foo1</option>
<option>foo2</option>
</select>
</root>'''.stripIndent()
关于xml - 如何使用 Groovy 的 MarkupBuilder 呈现列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095486/
我正在使用 MarkupBuilder 从 taglib 中呈现一些 HTML,如下所示(为了清楚起见,将其删除): def formContainer = new MarkupBuilder(out
我有这个代码: String buildCatalog(Catalog catalog) { def writer = new StringWriter() def xml = new
我的 xml 中需要一个名为 file 的元素,但是 gradle 项目有一个名为 file 的属性,该属性被调用。解决这个问题的最佳方法是什么? import groovy.xml.MarkupBu
我想添加表td“title”属性以及td内容。有没有办法做到这一点 最佳答案 我在grails标签库的上下文中使用了groovy标记构建器,我与您提到的需求共享一个小的自定义标签。查看title属性如
我正在使用groovys xml markupbuilder生成我的xml。我有一个标签的属性,该标签的值包含单引号('),当我在代码中对其进行设置并打印时,我看到生成的xml的单引号已更改为' 当我
我在 Grails 中有一个自定义标记库,并且我正在使用 MarkupBuilder 来帮助驱动一些动态表单。我需要将一些表单创建代码提取到它们自己的类/方法中,以便可以重用它们,并且我希望能够在这些
我正在使用 MarkupBuilder 生成 xml,需要知道如何将 NodeChild 添加到 MarkupBuilder 对象 我的代码 def fxml=new File("E:\\Projec
我有以下代码块用于编写一系列包含图标和文本的按钮元素: def tagcloud = { attrs, body -> def mb = new MarkupBuilder(out)
考虑以下代码: def builder = new MarkupBuilder() builder.root() { } 我想将 root 的子级的创建委托(delegate)给一个单独的方法。我怎样
我想要以下输出: ZH 2001 2001-01-01 token token 我可
因此,这是我的第一个问题,请保持温柔。我正在编写一些普通的代码,以使用MarkupBuilder生成xml。问题是我必须为许多不同的产品类型生成许多类似的xml,如果我无法对其进行参数化,代码将变得非
我正在尝试将像这样的日期(字符串) 2015-03-26 15:26:38 转换为像这样的日历日期:2015-03-26T15:26:38.000Z 以发送到 SOAP Web 服务。 我在 Mule
当使用 Groovy MarkupBuilder 时,我有一些地方需要将文本输出到文档中,或者调用一个将文本输出到文档中的函数。目前,我正在使用未定义的标签 "text" 进行输出。有没有更好的方法来
我在 groovy 中使用 MarkupBuilder 创建了一个 xml,但是如何将它写入我的项目目录 E:\tomcat 5.5\webapps\csm\include\xml 中的 xml 文件
我正在使用 groovy 进行一些 XML 处理。具体来说,我通过 XMLParser 吸入一个 XML 文件,进行一整批内存中处理,然后通过 MarkupBuiler 将结果数据序列化回 XML。
我正在使用 Groovy MarkupBuilder 将 map 转换为 XML .此映射可以包含简单的键/值对、其他映射或映射列表。我从代码中搭便车 here . import groovy.xml
目标:鉴于下面的 myInfoObject 定义,我希望能够做到这一点: println new groovy.xml.MarkupBuilder(myInfoObject).toPrettyStri
我了解如何使用 MarkupBuilder 在 Groovy 中创建 XML。在初始创建后如何将元素添加/插入到 MarkupBuilder 对象中?例如,开始于: def builder = new
我正在使用 groovy.xml.MarkupBuilder 创建 XML 响应,但它创建了生产中不需要的 pretty-print 结果。 def writer = new Stri
我正在使用 XML MarkupBuilder 生成 XML 文件 import groovy.xml.StreamingMarkupBuilder import groovy.xml.MarkupB
我是一名优秀的程序员,十分优秀!