Groovy MarkupBuilder을 사용하여 맵을 XML로 변환합니다. 이지도에는 간단한 키/값 쌍, 다른지도 또는지도 목록이 포함될 수 있습니다. 코드 here에서 피기 백입니다.Groovy의 MarkupBuilder를 사용하여 목록을 렌더링하는 방법
: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>
나는 열쇠의 배치로 놀아 보려고했지만 아무 소용이 없다. 이 모든 일이 잘못 될 것입니까, 아니면 빌더를 사용하지 않아야합니까?
3AM이 아니기 때문에 이것을 극적으로 단순화 할 수 있었다. Map과 Collection을위한 과부하는 여전히 저를 조금이라도 저주합니다. 그들은 중복 된 것처럼 보이지만 근본적으로 두 가지 거의 동일한 방법을 사용하는 것보다 더 깨끗한 방법을 결합하는 방법을 생각할 수 없습니다. –
아주 깨끗하고 우아한 대답, 고마워. – Igor