Analizarea fișierului XML utilizând analizorul SAX

Java oferă numeroase modalități de a analiza un fișier XML, cum ar fi analizarea unui fișier XML folosind parser DOM, parser SAX sau parser StAX.

Java oferă numeroase modalități de a analiza un fișier XML. De exemplu, analizarea unui fișier XML utilizând parser DOM, parser SAX sau parser StAX. În acest post vom vedea cum să analizăm un fișier XML folosind parserul SAX





Înainte de a intra în detalii despre cum să analizați fișierele XML folosind parserul SAX, să vedem mai întâi care este diferența dintre analizarea prin diferite parseruri și când să alegeți una peste alta.

Analizator SAX - SAX este un acronim pentru API simplu pentru XML. Analizorul SAX analizează fișierul XML linie cu linie și declanșează evenimente atunci când întâlnește deschiderea etichetei, eticheta de închidere sau datele caracterelor în fișierul XML. Acesta este motivul pentru care analizorul SAX este numit analizor bazat pe evenimente



Analizator DOM - DOM este un acronim pentru Document Object Model. Spre deosebire de parserul SAX, parserul DOM încarcă fișierul XML complet în memorie și creează o structură de copac în care fiecare nod din copac reprezintă o componentă a fișierului XML. Cu analizorul DOM puteți crea noduri, elimina noduri, schimba conținutul acestora și traversa ierarhia nodurilor. DOM oferă flexibilitate maximă în timp ce lucrați cu fișiere XML, dar vine cu un cost de amprentă de memorie potențial mare și cerințe semnificative de procesor în cazul fișierelor XML mari

Analizator StAX - StAX este un acronim pentru Streaming API for XML. Analizoarele bazate pe fluxuri sunt foarte utile atunci când aplicația dvs. are limitări de memorie. De exemplu, un telefon mobil care rulează Java Micro Edition. În mod similar, dacă aplicația dvs. trebuie să proceseze mai multe cereri simultan, de exemplu un server de aplicații, ar trebui să fie utilizat parserul StAX.

Analiza bazată pe flux poate fi clasificată în continuare ca:

Trageți analiza - În analizarea pull, aplicația client solicită metode într-o bibliotecă de analiză XML atunci când trebuie să interacționeze cu un set de informații XML. Cu alte cuvinte, clientul primește date XML numai atunci când le cere în mod explicit.



Push Parsing - În analiza push, analizorul XML este cel care împinge datele XML către client, atunci când întâlnește elemente dintr-un set de informații XML. Cu alte cuvinte, analizorul trimite datele către aplicație, indiferent dacă aplicația este gata să o folosească sau nu.

Comparație între analizorul SAX, DOM și StAX:

Tabelul de mai jos rezumă caracteristicile analizorului SAX, DOM și StAX

java cum să clonezi un obiect

Java_bloge_2

Acum, că știm despre diferitele analize, să vedem cum să analizăm fișierul XML folosind analizorul SAX

Fișier XML
Mai jos este fișierul XML pe care urmează să-l analizăm și să construim obiecte 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

Structura proiectului
Iată captura de ecran a structurii proiectului în Eclipse IDE

Iată clasa DVD care conține o listă de obiecte de 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 filme} public void setMovies (Listă filme) {this.movies = movies}}

Obiectul filmului are proprietăți precum numele, regizorii, durata de rulare (durata) filmului, anul lansării și distribuția filmului

este o și are o relație în java
package co.edureka.parsers.sax public class Movie {private String name private String directors private int runtime private int release private String cast public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return directors} public void setDirectors (String directors) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return Release} public void setReleased (int release) {this.released = released} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { returnează 'Film [nume =' + nume + ', regizori =' + regizori + ', runtime =' + runtime + ', lansat =' + lansat + ', cast =' + distribuitor + ']'}}

Implementarea SAX Handler:

Vom extinde org.xml.sax.helpers. Clasa DefaultHandler care oferă multe metode de apel invers și va suprascrie următoarele metode:

startElement () - Această metodă este apelată când se întâlnește începutul unei etichete

endElement () - Această metodă este apelată când se întâlnește sfârșitul unei etichete

caractere () - Această metodă este apelată când se întâlnesc anumite date text

Notă: Există multe alte metode de apel invers, cum ar fi startDocument (), endDocument () etc., care pot fi suprascrise, dacă este necesar.

package 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 extends DefaultHandler {DVD dvd = new DVD ( ) ListmovieList = new ArrayList () Movie film = null String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes attributes) {if (qname.equals ('dvd')) {String dvdName = attribute.getValue ('nume') 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 (conținut) break case 'directors': movie.setDirectors (conținut) break case 'release': movie.setReleased (Integer.parseInt (conținut)) 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}}

Testarea SAX Handler
Acum, să testăm SAXHandler. Mai jos este clasa de test SAXTest, unde primim mai întâi o instanță a SAXParser de la SAXParserFactory și apelăm metoda de analiză care ia două argumente: Un fișier și o instanță de gestionare.

pachet 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) aruncă ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactory = SAXParserFactory parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Lista filme = dvd.getMovies () System.out.println ('Nume DVD:' + dvd.getName ()) pentru (Film film: filme) {System.out.println (film)}}}

La executarea clasei SAXTest veți obține rezultatul de mai jos:

Notă : Dacă încercați să analizați un fișier XML cu structuri diferite de movies.xml, atunci codul din metodele startElement () și endElement () trebuie modificat.

Dacă sunteți interesat să încercați singur codul, descărcați codul
[buttonleads form_title = ”Cod de descărcare” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Cod de descărcare”]

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.

Postări asemănatoare:

java cum să clonezi un obiect