Crear un parser con SAX

2375 vistas

Veamos un ejemplo de creación de parser SAX usando un DefaultHandler.



java
  1. import org.xml.sax.*;
  2. import org.xml.sax.helpers.*;
  3. import javax.xml.parsers.*;
  4. import java.io.*;
  5. public class ExempleSAX {
  6.   public static void main(String[] args){
  7.       try{
  8.         // creación de una factory de parsers SAX
  9.         SAXParserFactory factory = SAXParserFactory.newInstance();
  10.         // creación de un parser SAX
  11.         SAXParser parser = factory.newSAXParser();
  12.         // lectura del fichero XML con un DefaultHandler
  13.         File fichero = new File("./EjemploSAX.xml");
  14.         DefaultHandler handler = new DefaultHandler();
  15.         parser.parse(fichero, handler);
  16.       }catch(ParserConfigurationException pce){
  17.         System.out.println("Error de configuración del parser");
  18.         System.out.println("En la llamada a newSAXParser()");
  19.       }catch(SAXException se){
  20.         System.out.println("Error de parsing");
  21.         System.out.println("En la llamada a parse()");
  22.       }catch(IOException ioe){
  23.         System.out.println("Error de entrada/salida");
  24.         System.out.println("En la llamada a parse()");
  25.       }
  26.   }
  27. }



Este código no hace "nada", en el sentido que no tendremos ningún efecto visual de la ejecución. Simplemente muestra cómo obtener un parser y los tipos de excepció susceptibles de provocarse. Para un ejemplo de implementación de DefaultHandler ver: [iurl=90&all=0&fs=896#900]Parsear un XML con SAX[/iurl].

Veamos algunas propiedades del parser (SAXParser) que podemos especificar a la factory (SAXParserFactory):

  • setValidating(boolean): indica si los parsers producidos por la factory tienen que validar el DTD. Por defecto está a false
  • setSchema(Schema): indica que los parsers producidos por la factory tienen que validar el documento XML según un esquema XML W3C.
  • setFeature(String, boolean): permite indicar una propiedad particular para los parsers producidos por la factory. Verlas aquÃ
  • setNamespaceAware(boolean): indica si los parsers producidos por la factory soportan los espacios de nombre XML.

Para terminar, podemos configurar más profundamente nuestro parser con el método setProperty(String, Object) de la clase SAXParser.