Analisi del file XML utilizzando SAX Parser



Java offre numerosi modi per analizzare un file XML come l'analisi di un file XML utilizzando un parser DOM, un parser SAX o un parser StAX.

Java offre numerosi modi per analizzare un file XML. Ad esempio, l'analisi di un file XML utilizzando il parser DOM, il parser SAX o il parser StAX. In questo post vedremo come analizzare un file XML utilizzando il parser SAX





programma per invertire un numero in java

Prima di entrare nei dettagli su come analizzare i file XML utilizzando il parser SAX, vediamo prima qual è la differenza tra l'analisi attraverso diversi parser e quando sceglierne uno rispetto all'altro.

SAX Parser - SAX è l'acronimo di Simple API for XML. SAX Parser analizza il file XML riga per riga e attiva gli eventi quando incontra tag di apertura, tag di chiusura o dati di caratteri nel file XML. Questo è il motivo per cui il parser SAX è chiamato parser basato su eventi



Parser DOM - DOM è l'acronimo di Document Object Model. A differenza del parser SAX, il parser DOM carica il file XML completo in memoria e crea una struttura ad albero in cui ogni nodo dell'albero rappresenta un componente del file XML. Con il parser DOM puoi creare nodi, rimuovere nodi, modificarne il contenuto e attraversare la gerarchia dei nodi. DOM offre la massima flessibilità durante il lavoro con file XML, ma comporta un costo di ingombro di memoria potenzialmente elevato e requisiti di processore significativi in ​​caso di file XML di grandi dimensioni

StAX Parser - StAX è l'acronimo di Streaming API per XML. I parser basati sul flusso sono molto utili quando l'applicazione presenta limitazioni di memoria. Ad esempio, un cellulare con Java Micro Edition. Allo stesso modo, se l'applicazione deve elaborare più richieste contemporaneamente, ad esempio un server delle applicazioni, è necessario utilizzare il parser StAX.

L'analisi basata sul flusso può essere ulteriormente classificata come:

Pull Parsing - Nell'analisi pull, l'applicazione client richiede metodi su una libreria di analisi XML quando deve interagire con un infoset XML. In altre parole, il client riceve i dati XML solo quando li richiede esplicitamente.



Push Parsing - In push parsing, è il parser XML che invia i dati XML al client, quando incontra elementi in un infoset XML. In altre parole, il parser invia i dati all'applicazione indipendentemente dal fatto che l'applicazione sia pronta per usarli o meno.

Confronto tra parser SAX, DOM e StAX:

La tabella seguente riassume le caratteristiche del parser SAX, DOM e StAX

Java_bloge_2

Ora che conosciamo i diversi parser, vediamo come analizzare il file XML utilizzando il parser SAX

File XML
Di seguito è riportato il file XML che analizzeremo e costruiremo oggetti 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

Struttura del progetto
Ecco la schermata della struttura del progetto in Eclipse IDE

Ecco la classe DVD che contiene un elenco di oggetti filmato

pacchetto 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'oggetto film ha proprietà come nome, registi, durata (durata) del film, anno di uscita e cast del film

pacchetto co.edureka.parsers.sax public class Movie {private String name private String director private int runtime private int rilasciato private String cast public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return director} public void setDirectors (String director) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {ritorno rilasciato} public void setReleased (int rilasciato) {this.released = rilasciato} 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 +', release = '+ release +', cast = '+ cast +'] '}}

Implementazione del gestore SAX:

Estenderemo org.xml.sax.helpers. DefaultHandler che fornisce molti metodi di callback e sovrascriverà i seguenti metodi:

startElement () - Questo metodo viene chiamato quando si incontra l'inizio di un tag

endElement () - Questo metodo viene chiamato quando si incontra la fine di un tag

personaggi() - Questo metodo viene chiamato quando vengono rilevati alcuni dati di testo

Nota: ci sono molti altri metodi di callback come startDocument (), endDocument () ecc. Che possono essere sovrascritti se necessario.

pacchetto 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 estende DefaultHandler {DVD dvd = new 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 ) {case 'movie': movieList.add (movie) break case 'name': movie.setName (content) break case 'directors': movie.setDirectors (content) break case 'published': movie.setReleased (Integer.parseInt (contenuto)) 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)} public DVD getDVD () {return dvd}}

Testare il SAX Handler
Ora proviamo il nostro SAXHandler. Di seguito è riportata la classe di test SAXTest in cui per prima cosa otteniamo un'istanza di SAXParser da SAXParserFactory e chiamiamo il metodo di analisi che accetta due argomenti: un file e un'istanza del gestore.

pacchetto 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 parserFactor = SAXParserFactory (parserFactory) parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) List movies = dvd.getMovies () System.out.println ('DVD Name:' + dvd.getName ()) per (Movie movie: movies) {System.out.println (movie)}}}

Eseguendo la classe SAXTest otterrai il seguente output:

Nota : Se stai cercando di analizzare un file XML con strutture diverse da movies.xml, il codice nei metodi startElement () e endElement () deve essere modificato.

Se sei interessato a provare tu stesso il codice, scarica il codice
[buttonleads form_title = 'Scarica codice' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'Scarica codice']

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.

Post correlati:

stipendio degli sviluppatori Java in India