Biblioteca Java SAX

SAX (Simple API for XML) , es la API para XML más ampliamente adoptada en Java y se considera el estándar de facto. Aunque comenzó como una biblioteca exclusiva para Java, ahora es una API conocida distribuida en una variedad de lenguajes de programación. Es un proyecto de código abierto y recientemente cambió a la infraestructura del proyecto SourceForge que facilita el seguimiento de los problemas abiertos de SAX fuera de la lista xml-dev de gran volumen. La última versión actual a partir del 10/01/2018 es SAX 2.0. Utiliza un mecanismo de acceso en serie controlado por eventos para acceder a documentos XML y lo utilizan con frecuencia applets que necesitan acceder a documentos XML porque es la API más rápida y que consume menos memoria disponible para analizar documentos XML. El mecanismo que utiliza SAX lo hace independiente de los elementos anteriores, es decir, es independiente del estado .

Configurar DOM (Document Object Model) es más fácil que configurar SAX y SAX es más difícil de visualizar que DOM debido a que su analizador interpreta los elementos XML en función de los eventos invocados. Esto también significa que no puede volver a una parte específica de la interpretación SAX ni reorganizarla. Y, por lo tanto, las aplicaciones pesadas para el usuario deberían usar DOM en lugar de SAX .

Sin embargo, hay muchas razones para familiarizarse con SAX , incluso si está utilizando DOM. A continuación se muestran las diversas ventajas de SAX sobre DOM :

  • Mismo manejo de errores: el tipo de excepciones generadas por SAX y DOM son idénticas.
  • Manejo de errores de validación: si desea generar una excepción cuando se produce un error de validación, debe comprender los mecanismos de manejo de errores de SAX.
  • Conversión de datos existentes: en DOM , puede convertir conjuntos de datos existentes en XML. Pero para poder implementarlo, necesita una comprensión básica de SAX.

¿Por qué o cuándo usar SAX?

SAX utiliza una estructura de modelo de eventos para convertir o analizar datos a XML simplemente modificando una aplicación existente para entregar eventos SAX a medida que lee los datos.

SAX es rápido y eficiente , pero su modelo de eventos lo hace más útil para el filtrado independiente del estado. Llama a diferentes métodos cuando se encuentra una etiqueta de elemento y cuando se encuentra un texto. Por lo tanto, siempre que el procesamiento sea independiente del estado (lo que significa que no depende de los elementos anteriores), entonces SAX funciona bien.

No crea una representación interna (estructura de árbol) de los datos XML como DOM , sino que simplemente envía los datos a la aplicación a medida que se leen y, por lo tanto, consume menos memoria .

La API de SAX actúa como un flujo de E/S en serie y, por lo tanto, es muy recomendable para aplicaciones simples que requieren analizadores XML.

Clases en la biblioteca SAX: hay pocas clases en la biblioteca SAX que facilitan el trabajo de análisis. Estos son:

  1. HandlerBase: esta clase proporciona implementaciones predeterminadas para DocumentHandler, ErrorHandler, DTDHandler y EntityResolver: los escritores de analizadores pueden usar esto para proporcionar una implementación predeterminada cuando el usuario no especifica controladores, y los escritores de aplicaciones pueden subclasificar esto para simplificar la escritura del controlador.
  2. InputSource Esta clase permite que una aplicación SAX encapsule información sobre una fuente de entrada en un solo objeto, que puede incluir un identificador público, un identificador de sistema, un flujo de bytes (posiblemente con una codificación específica) y/o un flujo de caracteres.

Ejemplo:

Archivo XML a analizar :

<?xml version="1.0"?>
<GFG>
    <contributor>
        <firstname>Baibhav</firstname>
        <lastname>Ojha</lastname>
    </contributor>
</GFG>

Programa Java para analizar el archivo :

// Java Code to describe implementation
// of SAX library
  
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
  
public class ReadXMLFile {
  
    public static void main(String argv[])
    {
        try {
            SAXParserFactory factory
                = SAXParserFactory.newInstance();
            SAXParser saxParser
                = factory.newSAXParser();
  
            DefaultHandler handler
                = new DefaultHandler() {
  
                      boolean bfname = false;
                      boolean blname = false;
  
                      public void startElement(String uri,
                                               String localName,
                                               String qName,
                                               Attributes attributes)
                          throws SAXException
                      {
                          if (qName.equalsIgnoreCase("firstname")) {
                              bfname = true;
                          }
  
                          if (qName.equalsIgnoreCase("lastname")) {
                              blname = true;
                          }
                      }
  
                      public void characters(char ch[],
                                             int start,
                                             int length)
                          throws SAXException
                      {
                          if (bfname) {
                              System.out.println("First Name : "
                                                 + new String(ch,
                                                              start,
                                                              length));
                              bfname = false;
                          }
  
                          if (blname) {
                              System.out.println("Last Name : "
                                                 + new String(ch,
                                                              start,
                                                              length));
                              blname = false;
                          }
                      }
  
                  };
  
            saxParser.parse("C:\\gfg.xml", handler);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Publicación traducida automáticamente

Artículo escrito por BaibhavOjha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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