lunes, 28 de noviembre de 2011

GROOVY- Trabajando con XML

Todos sabemos que crear o tratar ficheros con Java puede ser bastante engorroso, pero con groovy la cosa es muy diferente.
En este post pondré un breve ejemplo de cómo crear un documento XML y cómo leerlo con Groovy.

Groovy proporciona los denominados Builders para facilitar el tratamiento de documentos XML. Incluye cinco builders principales, mostrados en la siguiente lista, que se utilizan de forma similar, lo que implica que conociendo cómo usar uno es bastante sencillo utilizar el resto.

  • AntBuilder: permite la creación de scripts y ejecución de tareas Ant
  • DOMBuilder: genera W3C DOMS.
  • MarkupBuilder: genera XML y HTML
  • NodeBuilder: genera árboles anidados de objetos para tratar datos arbitrarios
  • SwingBulder: crea interfaces Java Swing
Por lo general primero se instancia el builder y después se llaman a closures para crear el elemento root y, anidados, el resto de elementos. Este formato permite una fácil lectura del código (dentro de lo posible). En cuanto a los atributos, se añaden como parámetros de los closures a la hora de realizar las llamadas.

En los siguientes ejemplos se usará el siguiente XML como ejemplo.
<elementoRoot>
  <nodo id="1">
    <nombre>Nombre del nodo</nombre>
    <descripcion>Aquí va la descripción del nodo</descripcion>
  </nodo>
</elementoRoot>
Escribir un XML
En este ejemplo vamos a generar el XML anteriormente mencionado usando GroovyMarkupBuilder.
def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
builder.setDoubleQuotes(true)
builder.elementoRoot{
  nodo(id:"1"){
    name "Nombre del nodo"
    descripcion "Aquí va la descripción del nodo"
  }
}
Como podéis ver generar un XML con Groovy puede ser muy sencillo. En el ejemplo se comienza creando un StringWriter para permitir imprimir el XML generado por pantalla. A continuación el MarkupBuilder se crea utilizando este writer.

Por defecto, MarkupBuilder utiliza comillas simples para los atributos, así que con la línea 3 lo que hacemos es cambiar este comportamiento por defecto para que utilice comillas dobles para cumplir con la especificación XML.

Las líneas siguientes son las encargadas de crear el documento XML. Primero se crear el elemento root y después se anidan los distintos elementos del documento XML. Como podéis ver, el primer nodo después del root tiene un atributo de nombre id y de valor 1 que se crea pasándo como parámetros estos valores.

Leer un XML
Para este ejemplo se va a utilizar XmlSlurper para leer fácilmente un documento XML.
Con XmlSlurper, groovy permite parsear documentos XML o Strings y proporciona acceso a GPathResult el cual permite utilizar la sintáxis XPath para acceder a los distintos elementos del documento.
def elementos = new XmlSlurpert().parse('prueba.xml')
assert 1 == elementos.nodo.size()
assert "Nombre del nodo" == elementos.nodo[0].nombre.text()
assert "1" == elementos.nodo[0].@id.text()
El ejemplo comienza creando el XmlSlurper y parseando el archivo prueba.xml que contiene el xml mostrado al comienzo del post.La línea 2 comprueba el número de elementos nodo. La línea 3 accede al contenido del nodo nombre del primer nodo del documento. Finalmente la línea 4 accede al atributo id del primer nodo del documento.

Bueno, como podréis imaginar se pueden hacer cosas mucho más complejas, pero lo que aquí he mostrado es la base de la que podéis partir. Espero que os sirva.

Enjoy!

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More