Dica: criando XML com Groovy

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>


Publicado

em

por

Tags:

Comentários

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.