Criar XML com Groovy é absurdamente simples. Para tal, tudo o que precisamos consiste na classe groovy.xml.MarkupBuilder.
Como o próprio nome já entrega: esta classe utiliza o recurso builder presente em Groovy de uma maneira bastante bacana.
Tudo o que precisamos fazer consiste em passar uma estrutura hierarquica para uma instância de MarkupBuilder e em seguida evocar o método toString().
Sendo assim, vamos começar com um exemplo simples: meus cães.
import groovy.xml.MarkupBuilder xml = new MarkupBuilder() xml.canalha() { cao(nome:"Fraude", raca:"Pinscher?") cao(nome:"Zé", raca:"Schnauzer") } xml.toString() // irá retornar uma string contendo o xml gerado
Repare: óbviamente a classe MarkupBuilder não possui um atributo chamado canalha. O que eu faço consiste em chamar um método com este nome na instância de minha classe. Groovy irá tirar proveito de sua natureza dinâmica (veja este meu post sobre o assunto) e em seguida analizará a estrutura hierarquica que segue o nome do “método”, o que irá gerar o XML abaixo:
<canalha> <cao nome='Fraude' raca='Pinscher?' /> <cao nome='Zé' raca='Schnauzer' /> </canalha>
Agora, suponhamos que eu queira algo mais. Além de listar meus cães, quero também listar suas vítimas. Basta agir tal como no exemplo abaixo:
import groovy.xml.MarkupBuilder xml = new MarkupBuilder() xml.canalha() { cao(nome:"Fraude", raca:"Pinscher?", vitimas() { coitado(nome:'celulares mil') coitado(nome:'cadeiras') coitado(nome:'ouvido dos vizinhos') } ) cao(nome:"Zé", raca:"Schnauzer", vitimas() { coitado(nome:'Fraude') coitado(nome:'Senhor de muletas') } ) } xml.toString()
E o XML gerado será…
<canalha> <vitimas> <coitado nome='celulares mil' /> <coitado nome='cadeiras' /> <coitado nome='ouvido dos vizinhos' /> </vitimas> <cao nome='Fraude' raca='Pinscher?'>vitimas</cao> <vitimas> <coitado nome='Fraude' /> <coitado nome='Senhor de muletas' /> </vitimas> <cao nome='Zé' raca='Schnauzer'>vitimas</cao> </canalha>