Analyse d'un fichier XML à l'aide de l'analyseur SAX

Java fournit de nombreuses façons d'analyser un fichier XML, comme l'analyse d'un fichier XML à l'aide de l'analyseur DOM, de l'analyseur SAX ou de l'analyseur StAX.



Java fournit de nombreuses façons d'analyser un fichier XML. Par exemple, analyser un fichier XML à l'aide d'un analyseur DOM, d'un analyseur SAX ou d'un analyseur StAX. Dans cet article, nous verrons comment analyser un fichier XML à l'aide de l'analyseur SAX



Avant d'entrer dans les détails sur la façon d'analyser des fichiers XML à l'aide de l'analyseur SAX, voyons d'abord quelle est la différence entre l'analyse par différents analyseurs et quand choisir l'un par rapport à l'autre.

Analyseur SAX - SAX est un acronyme pour Simple API for XML. SAX Parser analyse le fichier XML ligne par ligne et déclenche des événements lorsqu'il rencontre une balise d'ouverture, une balise de fermeture ou des données de caractère dans un fichier XML. C'est pourquoi l'analyseur SAX est appelé analyseur basé sur les événements



Analyseur DOM - DOM est un acronyme pour Document Object Model. Contrairement à l'analyseur SAX, l'analyseur DOM charge le fichier XML complet en mémoire et crée une structure arborescente où chaque nœud de l'arborescence représente un composant du fichier XML. Avec l'analyseur DOM, vous pouvez créer des nœuds, supprimer des nœuds, modifier leur contenu et parcourir la hiérarchie des nœuds. DOM offre une flexibilité maximale tout en travaillant avec des fichiers XML, mais il est livré avec un coût d'une empreinte mémoire potentiellement importante et des exigences de processeur importantes en cas de fichiers XML volumineux

Analyseur StAX - StAX est un acronyme pour Streaming API for XML. Les analyseurs basés sur les flux sont très utiles lorsque votre application a des limitations de mémoire. Par exemple, un téléphone portable exécutant Java Micro Edition. De même, si votre application doit traiter plusieurs requêtes simultanément, par exemple un serveur d'application, l'analyseur StAX doit être utilisé.

L'analyse basée sur les flux peut en outre être classée comme suit:

Analyse par extraction - Dans l'analyse par extraction, l'application cliente appelle des méthodes sur une bibliothèque d'analyse XML lorsqu'elle a besoin d'interagir avec un ensemble d'informations XML. En d'autres termes, le client n'obtient des données XML que lorsqu'il les demande explicitement.



Analyse push - Dans l'analyse push, c'est l'analyseur XML qui pousse les données XML vers le client, lorsqu'il rencontre des éléments dans un infoset XML. En d'autres termes, l'analyseur envoie les données à l'application, que l'application soit prête à l'utiliser ou non.

la clause union est utilisée pour

Comparaison entre les analyseurs SAX, DOM et StAX:

Le tableau ci-dessous résume les fonctionnalités de l'analyseur SAX, DOM et StAX

Java_bloge_2

Maintenant que nous connaissons les différents analyseurs, voyons comment analyser un fichier XML à l'aide de l'analyseur SAX

Fichier XML
Vous trouverez ci-dessous le fichier XML que nous allons analyser et construire des objets Java

The Bourne Identity Doug Liman 119 Matt Damon, Franka Potente 2002 The Bourne Supremacy Paul Greengrass 108 Matt Damon, Franka Potente, Joan Allen 2004 The Bourne Ultimatum Paul Greengrass 115 Matt Damon, Edgar Ramirez, Joan Allen 2007 The Bourne Legacy Tony Gilroy 135 Jeremy Renner , Rachel Weisz, Edward Norton 2012

Structure du projet
Voici la capture d'écran de la structure du projet dans Eclipse IDE

Voici la classe DVD qui contient une liste d'objets film

package co.edureka.parsers.sax import java.util.List public class DVD {private String name private List movies public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {return movies} public void setMovies (List movies) {this.movies = movies}}

L'objet Movie a des propriétés telles que le nom, les réalisateurs, la durée d'exécution (durée) du film, l'année de sortie et la distribution du film

package co.edureka.parsers.sax public class Movie {private String name private String director private int runtime private int published private String cast public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return directeurs} public void setDirectors (String Directors) {this.directors = directeurs} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return published} public void setReleased (int published) {this.released = published} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { return 'Movie [name =' + name + ', Directors =' + Directors + ', runtime =' + runtime + ', published =' + published + ', cast =' + cast + ']'}}

Implémentation du gestionnaire SAX:

Nous allons étendre les org.xml.sax.helpers. DefaultHandler qui fournit de nombreuses méthodes de rappel et remplacera les méthodes suivantes:

startElement () - Cette méthode est appelée lorsque le début d'une balise est rencontré

endElement () - Cette méthode est appelée lorsque la fin d'une balise est rencontrée

java qu'est-ce qu'un vecteur

personnages() - Cette méthode est appelée lorsque des données texte sont rencontrées

Remarque: il existe de nombreuses autres méthodes de rappel comme startDocument (), endDocument () etc. qui peuvent être remplacées si nécessaire.

package co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler Classe publique SAXHandler étend DefaultHandler {DVD dvd = nouveau DVD ( ) ListmovieList = new ArrayList () Movie movie = null String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes attributes) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('name') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {switch (qname ) {cas 'film': movieList.add (film) cas d'arrêt 'nom': movie.setName (contenu) cas d'arrêt 'directeurs': movie.setDirectors (contenu) cas d'arrêt 'publié': movie.setReleased (Integer.parseInt (content)) break case 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} public void chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} DVD public getDVD () {return dvd}}

Test du gestionnaire SAX
Maintenant, testons notre SAXHandler. Ci-dessous se trouve la classe de test SAXTest où nous obtenons d'abord une instance de SAXParser de SAXParserFactory et appelons la méthode d'analyse qui prend deux arguments: un fichier et une instance de gestionnaire.

package 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 classe publique SAXTest {public static void main (String [] args) lance ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactory (SAXParserFactory parserFactor = SAXParserFactory) parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Liste des films = dvd.getMovies () System.out.println ('Nom du DVD:' + dvd.getName ()) pour (Film film: films) {System.out.println (film)}}}

Lors de l'exécution de la classe SAXTest, vous obtiendrez la sortie ci-dessous:

Remarque : Si vous essayez d'analyser un fichier XML avec des structures différentes de movies.xml, le code des méthodes startElement () et endElement () doit être modifié.

Si vous souhaitez essayer le code vous-même, téléchargez le code
[buttonleads form_title = 'Télécharger le code' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'Télécharger le code']

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.

Articles Similaires: