SAX es un parser que nos permite analizar documentos XML. Su caracteristica principal es que está basado en eventos. Eventos como inicio de etiqueta, fin de etiqueta, contenido de etiqueta,…..
SAX nos proporcionará ese conjunto de eventos y nosostros deberemos de ver qué realizar en cada uno de ellos.
En este primer ejemplo lo que haremos será simplemente volcar el contenido de cada una de las etiquetas que se encuentre el analizador. Para ello echaremos mano del evento characters…
public void characters(char[] ch, int start, int len)
throws SAXException{...}
Este evento es disparado cada vez que el analizador se encuentra el contenido de una etiqueta. Los parámetros que recibe son: la cadena encontrada como cadena de caracteres (ch), el inicio en dicha cadena (start) y la longitud de la misma (len). Hay que tener cuidado y controlar que no se produzca la excepción SAXException.
Nosotros volcaremos el contenido del elemento a pantalla…
System.out.println(new String(ch,start,len));
El conjunto de eventos posibles a manejar se deberán de agrupar en lo que SAX denomina Handler o Manejador. La clase que tiene los eventos por defecto es DefaultHandler. A si que nosostros crearemos un “manejador” que herede de DefaultHandler, en el cual implementaremos la funcionalidad que nos interese de los eventos.
public class MiManejador extends DefaultHandler {}
Una vez que nos hemos creado el manejador, deberemos de crear la aplicación que utilice dicho manejador para analizar el documento. Esta será una aplicación Java normal de consola.
Lo primero que necesitamos es el parser (analizador). Para ello deberemos de instanciar una factoría de parsers, a la cual le pediremos que nos porporcione uno para analizar nuestro documento XML.
SAXParserFactory factory = SAXParserFactory.newInstance();
parser = factory.newSAXParser();
Posteriormente deberemos de configurar el analizardor. Para ello le indicaremos cual es el fichero que contiene el XML y el manejador que hemos implementado para analizar dicho XML.
MiManejador manejador = new MiManejador();
parser.parse(is, manejador);