Leer un XML con SAX en Java

Hola a todos, hoy os voy a explicar como podemos leer un XML con SAX en Java.

SAX o Sample API for XML es un estándar de parseo de XML que  procesa el documento como DOM pero de una forma diferente.

SAX procesa la información en XML manipulando cada elemento, ideal para manipular archivos de gran tamaño. Es más rápido y sencillo que utilizar DOM.

Teniendo este XML de ejemplo:

Para empezar con SAX, necesitamos crear una clase que herede de la clase DefaultHandler.

Necesitaremos un StringBuilder para ir almacenando el contenido de la etiqueta.

Tenemos 3 métodos que vamos a sobrescribir: startElementcharactersendElement.

Con SAX, para cada etiqueta, pasará por estos 3 métodos.

Empecemos por startElement

Ponemos el StringBuilder su longitud a 0, ya que su valor lo rellenaremos en el método characters  y lo mostraremos en el método endElement.

Para los atributos, lo podemos coger desde el parámetro attributes. El parámetro qName es el nombre de la etiqueta.

En nuestro caso, cuando la etiqueta es libro, cogeremos el valor del atributo año.

En el método characters, iremos añadiendo el contenido de la etiqueta a nuestro StringBuilder.

En el método endElement, salta cuando terminamos con esa etiqueta. Lo que haremos es mostrar el contenido de nuestro StringBuilder. Según el parámetro qName, mostraremos un mensaje u otro.

Recodar que en el método startElement, reiniciamos nuestro StringBuilder.

Ahora, nos creamos una clase ejecutable con el siguiente contenido:

Creamos una instancia de SAXParserFactory y de esta creamos un SAXParser, aparte de una instancia de LibroHandler.

Este es el resultado:

Os dejo un repositorio con el código.

https://github.com/DiscoDurodeRoer/ejemplo-sax-java

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudar.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539