Raščlanjivanje XML datoteke pomoću SAX parsera



Java nudi brojne načine za raščlanjivanje XML datoteke poput raščlanjivanja XML datoteke pomoću DOM parsera, SAX parsera ili StAX parsera.

Java nudi brojne načine za raščlanjivanje XML datoteke. Na primjer, raščlanjivanje XML datoteke pomoću DOM parsera, SAX parsera ili StAX parsera. U ovom ćemo postu vidjeti kako raščlaniti XML datoteku pomoću SAX parsera





Prije nego što uđemo u detalje o tome kako raščlaniti XML datoteke pomoću SAX parsera, prvo pogledajmo koja je razlika između raščlanjivanja kroz različite raščlanjivače i kada odabrati jedan umjesto drugog.

SAX Raščlanjivač - SAX je kratica za Simple API for XML. SAX Parser analizira XML datoteku redak po redak i pokreće događaje kada naiđe na otvarajuću oznaku, zaključnu oznaku ili podatke o znakovima u XML datoteci. Zbog toga se SAX parser naziva parserom temeljenim na događajima



DOM Parser - DOM je kratica za Document Object Model. Za razliku od SAX parsera, DOM parser učitava kompletnu XML datoteku u memoriju i stvara strukturu stabla gdje svaki čvor u stablu predstavlja komponentu XML datoteke. Pomoću DOM parsera možete stvoriti čvorove, ukloniti čvorove, promijeniti njihov sadržaj i preći hijerarhiju čvorova. DOM pruža maksimalnu fleksibilnost tijekom rada s XML datotekama, ali dolazi s troškom potencijalno velikog otiska memorije i značajnim zahtjevima procesora u slučaju velikih XML datoteka

StAX parser - StAX je kratica za Streaming API za XML. Analizatori temeljeni na streamu vrlo su korisni kada vaša aplikacija ima ograničenja memorije. Na primjer, mobitel s Java Micro Editionom. Slično tome, ako vaša aplikacija treba istovremeno obrađivati ​​nekoliko zahtjeva, na primjer poslužitelj aplikacija, trebao bi se koristiti parser StAX.

kako napisati singleton klasu u javi -

Analiziranje temeljeno na toku može se dalje klasificirati kao:

Povucite Raščlanjivanje - U povlačenju raščlanjivanja, klijentska aplikacija poziva metode na XML biblioteku raščlanjivanja kada treba interakciju s XML informacijskim skupom. Drugim riječima, klijent dobiva XML podatke samo kad ih izričito traži.



Guranje pritiskom - U push raščlanjivanju, XML parser je taj koji XML podatke potiskuje klijentu kada naiđe na elemente u XML info skupu. Drugim riječima, parser šalje podatke aplikaciji bez obzira na to je li aplikacija spremna za upotrebu ili ne.

Usporedba SAX, DOM i StAX parsera:

Tablica u nastavku sažima značajke SAX, DOM i StAX parsera

Java_bloge_2

Sad kad znamo za različite parsere, pogledajmo kako raščlaniti XML datoteku pomoću SAX parsera

XML datoteka
Ispod je XML datoteka koju ćemo raščlaniti i konstruirati Java objekte

The Bourne Identity Doug Liman 119 Matt Damon, Franka Potente 2002 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 Bourne Legacy Tony Gilroy 135 Jeremy Renner , Rachel Weisz, Edward Norton 2012

Struktura projekta
Evo snimke zaslona strukture projekta u Eclipse IDE-u

Evo DVD klase koja sadrži popis filmskih predmeta

paket co.edureka.parsers.sax import java.util.List javna klasa DVD {ime privatnog niza privatni popis filmova javni niz getName () {return ime} javna praznina setName (ime niza) {this.name = name} javni popis getMovies () {return movies} javni void setMovies (Popis filmova) {this.movies = movies}}

Filmski objekt ima svojstva kao što su ime, redatelji, vrijeme izvođenja (trajanje) filma, godina izdanja i uloga filma

paket co.edureka.parsers.sax javna klasa Film {privatni naziv niza privatni String direktori private int runtime private int objavljen private String cast public String getName () {return name} javna praznina setName (ime niza) {this.name = name} javni String getDirectors () {return directors} javna void setDirectors (direktori niza) {this.directors = directors} public int getRuntime () {return runtime} javna void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {povratak objavljen} javna praznina setReleased (int izdano) {this.released = objavljeno} javni niz getCast () {return cast} javna praznina setCast (niz uloga) {this.cast = cast} @Override javni niz toString () { povratak 'Film [ime =' + ime + ', direktori =' + direktori + ', vrijeme izvođenja =' + vrijeme izvođenja + ', objavljeno =' + objavljeno + ', cast =' + cast + ']'}}

Implementacija SAX rukovatelja:

Proširit ćemo org.xml.sax.helpers. Klasa DefaultHandler koja nudi mnoge metode povratnog poziva i nadjačat će sljedeće metode:

pojo razred u javi s primjerom

startElement () - Ova se metoda poziva kada se naiđe na početak oznake

endElement () - Ova se metoda poziva kada se naiđe na kraj oznake

znakova () - Ova se metoda poziva kada se nađu neki tekstualni podaci

Napomena: Postoje mnoge druge metode povratnog poziva poput startDocument (), endDocument () itd. Koje se po potrebi mogu nadjačati.

paket co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler javna klasa SAXHandler proširuje DefaultHandler {DVD dvd = novi DVD ( ) ListmovieList = new ArrayList () Movie movie = null Sadržaj niza = null public void startElement (String namesURI, String localName, String qname, Atributi atributi) {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 ) {slučaj 'film': filmList.add (film) slučaj slučaja 'ime': film.setName (sadržaj) slučaj slučaja 'direktori': film.setDirectors (sadržaj) slučaj slučaja 'objavljeno': film.setReleased (Integer.parseInt (sadržaj)) slučaj slučaja 'runtime': movie.setRuntime (Integer.parseInt (sadržaj)) slučaj slučaja 'cast': movie.setCast (sadržaj) slučaj slučaja 'dvd': dvd.setMovies (filmList) break}} javna praznina chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} javni DVD getDVD () {return dvd}}

Testiranje SAX rukovatelja
Ajmo sada testirati naš SAXHandler. Ispod je test klasa SAXTest gdje prvo dobivamo primjerak SAXParser iz SAXParserFactory i pozivamo metodu parse koja uzima dva argumenta: Datoteku i instancu obrađivača.

paket 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 javna klasa SAXTest {javna statička void main (String [] args) baca ParserConfigurationException, SAXException, IOException {SAXParserFactory parxserserserfix parserFactor.newSAXParser () SAXHandler rukovatelj = novi SAXHandler () Put puta = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Popis filmova = dvd.getMovies () System.out.println ('Naziv DVD-a:' + dvd.getName ()) za (Filmski film: filmovi) {System.out.println (film)}}}

Izvršavanjem klase SAXTest dobit ćete donji izlaz:

Bilješka : Ako pokušavate raščlaniti XML datoteku s različitim strukturama iz filma.xml, tada treba promijeniti kôd u metodama startElement () i endElement ().

kako napisati singleton klasu u javi -

Ako ste zainteresirani da sami isprobate kôd, preuzmite ga
[buttonleads form_title = ”Preuzmi kod” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Preuzmi kod”]

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.

Vezane objave: