Análisis de archivos XML con analizador SAX



Java proporciona numerosas formas de analizar un archivo XML, como analizar un archivo XML utilizando el analizador DOM, el analizador SAX o el analizador StAX.

Java proporciona numerosas formas de analizar un archivo XML. Por ejemplo, analizar un archivo XML utilizando el analizador DOM, el analizador SAX o el analizador StAX. En esta publicación veremos cómo analizar un archivo XML usando el analizador SAX





Antes de entrar en detalles sobre cómo analizar archivos XML utilizando el analizador SAX, veamos primero cuál es la diferencia entre analizar diferentes analizadores y cuándo elegir uno sobre el otro.

Analizador SAX - SAX es un acrónimo de API simple para XML. SAX Parser analiza el archivo XML línea por línea y activa eventos cuando encuentra una etiqueta de apertura, una etiqueta de cierre o datos de caracteres en el archivo XML. Es por eso que el analizador SAX se denomina analizador basado en eventos.



Analizador DOM - DOM es un acrónimo de Document Object Model. A diferencia del analizador SAX, el analizador DOM carga el archivo XML completo en la memoria y crea una estructura de árbol donde cada nodo del árbol representa un componente del archivo XML. Con el analizador DOM puede crear nodos, eliminar nodos, cambiar su contenido y recorrer la jerarquía de nodos. DOM proporciona la máxima flexibilidad al trabajar con archivos XML, pero tiene un costo de espacio de memoria potencialmente grande y requisitos de procesador significativos en caso de archivos XML grandes

Analizador StAX - StAX es un acrónimo de Streaming API para XML. Los analizadores basados ​​en secuencias son muy útiles cuando su aplicación tiene limitaciones de memoria. Por ejemplo, un teléfono móvil con Java Micro Edition. De manera similar, si su aplicación necesita procesar varias solicitudes simultáneamente, por ejemplo, un servidor de aplicaciones, se debe usar el analizador StAX.

El análisis basado en secuencias se puede clasificar además como:

Pull Parsing - En el análisis de extracción, la aplicación cliente solicita métodos en una biblioteca de análisis XML cuando necesita interactuar con un conjunto de información XML. En otras palabras, el cliente solo obtiene datos XML cuando los solicita explícitamente.



Análisis de empuje - En el análisis sintáctico, es el analizador XML el que envía datos XML al cliente, cuando encuentra elementos en un conjunto de información XML. En otras palabras, el analizador envía los datos a la aplicación independientemente de que la aplicación esté lista para usarla o no.

Comparación entre el analizador SAX, DOM y StAX:

La siguiente tabla resume las características del analizador SAX, DOM y StAX

Java_bloge_2

Ahora que conocemos los diferentes analizadores, veamos cómo analizar un archivo XML usando el analizador SAX

Archivo XML
A continuación se muestra el archivo XML que vamos a analizar y construir objetos Java

La identidad de Bourne Doug Liman 119 Matt Damon, Franka Potente 2002 La supremacía de Bourne Paul Greengrass 108 Matt Damon, Franka Potente, Joan Allen 2004 El ultimátum de Bourne Paul Greengrass 115 Matt Damon, Edgar Ramirez, Joan Allen 2007 El legado de Bourne Tony Gilroy 135 Jeremy Renner , Rachel Weisz, Edward Norton 2012

Estructura del proyecto
Aquí está la captura de pantalla de la estructura del proyecto en Eclipse IDE

estructura de datos del diccionario en java

Aquí está la clase de DVD que contiene una lista de objetos de película

paquete co.edureka.parsers.sax import java.util.List public class DVD {private String name private Lista de películas public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {devolver películas} public void setMovies (Lista de películas) {this.movies = películas}}

El objeto de película tiene propiedades como nombre, directores, tiempo de ejecución (duración) de la película, año de lanzamiento y elenco de la película

paquete co.edureka.parsers.sax public class Película {nombre de cadena privado privado directores de cadena privado int tiempo de ejecución privado int liberado privado cadena emitido público String getName () {nombre de retorno} public void setName (nombre de cadena) {this.name = nombre} public String getDirectors () {return directores} public void setDirectors (String directores) {this.directors = directores} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {retorno liberado} public void setReleased (int liberado) {this.released = liberado} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { return 'Película [nombre =' + nombre + ', directores =' + directores + ', tiempo de ejecución =' + tiempo de ejecución + ', lanzado =' + lanzado + ', reparto =' + reparto + ']'}}

Implementación del controlador SAX:

Vamos a ampliar org.xml.sax.helpers. Clase DefaultHandler que proporciona muchos métodos de devolución de llamada y anulará los siguientes métodos:

startElement () - Este método se llama cuando se encuentra el inicio de una etiqueta

endElement () - Este método se llama cuando se encuentra el final de una etiqueta

caracteres() - Este método se llama cuando se encuentran algunos datos de texto

Nota: Hay muchos otros métodos de devolución de llamada como startDocument (), endDocument (), etc. que pueden anularse si es necesario.

paquete co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler public class SAXHandler extiende DefaultHandler {DVD dvd = nuevo DVD ( ) ListmovieList = new ArrayList () Movie movie = null String content = null public void startElement (String namespaceURI, String localName, String qname, Atributos atributos) {if (qname.equals ('dvd')) {String dvdName = atributos.getValue ('name') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {switch (qname ) {caso 'película': movieList.add (película) caso de ruptura 'nombre': película.setName (contenido) caso de ruptura 'directores': movie.setDirectors (contenido) caso de ruptura 'liberado': película.setReleased (Integer.parseInt (contenido)) caso de ruptura 'runtime': movie.setRuntime (Integer.parseInt (contenido)) caso de ruptura 'cast': movie.setCast (contenido) caso de ruptura 'dvd': dvd.setMovies (movieList) break}} public void chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} public DVD getDVD () {return dvd}}

Prueba del controlador SAX
Ahora probemos nuestro SAXHandler. A continuación se muestra la clase de prueba SAXTest donde primero obtenemos una instancia de SAXParser de SAXParserFactory y llamamos al método de análisis que toma dos argumentos: un archivo y una instancia de controlador.

paquete co.edureka.parsers.sax import java.io.IOException import java.nio.file.Path import java.nio.file.Paths import java.util.List import javax.xml.parsers.ParserConfigurationException import javax.xml.parsers .SAXParser import javax.xml.parsers.SAXParserFactory import org.xml.sax.SAXException public class SAXTest {public static void main (String [] args) throws ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactorFactor = SAX. parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Lista de películas = dvd.getMovies () System.out.println ('Nombre de DVD:' + dvd.getName ()) para (Película película: películas) {System.out.println (película)}}}

Al ejecutar la clase SAXTest, obtendrá el siguiente resultado:

Nota : Si está intentando analizar un archivo XML con estructuras diferentes de movies.xml, entonces el código de los métodos startElement () y endElement () debe cambiarse.

convertir decimal a binario en python

Si está interesado en probar el código usted mismo, descargue el código
[buttonleads form_title = ”Código de descarga” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Código de descarga”]

Tienes una pregunta para nosotros? Menciónalo en la sección de comentarios y nos comunicaremos contigo.

Artículos Relacionados: