Groovy MarkupBuilderを使用して Map を XML に変換しています。このマップには、単純なキーと値のペア、他のマップ、またはマップのリストを含めることができます。ここのコードからピギーバックしています。
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>
<option>foo1</option>
<option>foo2</option>
</select>
キーの配置をいじってみましたが、だめでした。私はこれについてすべて間違っているのでしょうか、それともビルダーを使用すべきではありませんか?