Analyse av XML-fil ved bruk av SAX Parser



Java gir mange måter å analysere en XML-fil som å analysere en XML-fil ved hjelp av DOM-parser, SAX-parser eller StAX-parser.

Java gir flere måter å analysere en XML-fil på. For eksempel analyse av en XML-fil ved hjelp av DOM-parser, SAX-parser eller StAX-parser. I dette innlegget vil vi se hvordan du analyserer en XML-fil ved hjelp av SAX-parser





Før vi går inn i detaljene om hvordan du analyserer XML-filer ved hjelp av SAX-parser, skal vi først se hva som er forskjellen mellom parsing gjennom forskjellige parsers og når vi skal velge hverandre.

SAX Parser - SAX er et akronym for Simple API for XML. SAX Parser analyserer XML-filen linje for linje og utløser hendelser når den møter åpningskode, lukkekode eller tegndata i XML-fil. Dette er grunnen til at SAX-parser kalles en hendelsesbasert parser



DOM Parser - DOM er et akronym for Document Object Model. I motsetning til SAX-parser laster DOM-parser hele XML-filen i minnet og skaper en trestruktur der hver node i treet representerer en komponent av XML-filen. Med DOM-parser kan du opprette noder, fjerne noder, endre innholdet og krysse nodehierarkiet. DOM gir maksimal fleksibilitet mens du arbeider med XML-filer, men det medfører en kostnad for potensielt stort minnefotavtrykk og betydelige prosessorbehov i tilfelle store XML-filer

hva gjør system.exit (0) i java

StAX Parser - StAX er et akronym for Streaming API for XML. Stream-baserte parsere er veldig nyttige når applikasjonen din har minnebegrensninger. For eksempel en mobiltelefon som kjører Java Micro Edition. Tilsvarende, hvis applikasjonen din trenger å behandle flere forespørsler samtidig, for eksempel en applikasjonsserver, bør StAX-parser brukes.

Strømbasert analyse kan videre klassifiseres som:

Trekk parsing - Ved pull-parsing krever klientapplikasjon metoder i et XML-parsingbibliotek når det trenger å samhandle med et XML-infosett. Med andre ord får klienten bare XML-data når den eksplisitt ber om det.



Push Parsing - Ved push-parsing er det XML-parseren som skyver XML-data til klienten når den møter elementer i et XML-infosett. Med andre ord sender parser dataene til applikasjonen uavhengig av at applikasjonen er klar til å bruke den eller ikke.

Sammenligning mellom SAX, DOM og StAX parser:

Tabellen nedenfor oppsummerer funksjonene til SAX, DOM og StAX parser

Java_bloge_2

Nå som vi vet om de forskjellige parserne, la oss se hvordan du kan analysere XML-filer ved hjelp av SAX parser

XML-fil
Nedenfor er XML-filen som vi skal analysere og konstruere Java-objekter

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

Prosjektstruktur
Her er skjermbildet av prosjektstrukturen i Eclipse IDE

Her er DVD-klassen som inneholder en liste over filmobjekter

pakke co.edureka.parsers.sax import java.util.List offentlig klasse DVD {privat String navn privat Liste filmer offentlig String getName () {retur navn} offentlig ugyldig setName (String navn) {this.name = navn} offentlig Liste getMovies () {return films} public void setMovies (Liste filmer) {this.movies = films}}

Filmobjekt har egenskaper som navn, regissører, filmtid, varighet), utgitt år og rollebesetning av filmen

pakke co.edureka.parsers.sax offentlig klasse Film {privat String navn privat String regissører privat int runtime privat int utgitt privat String cast offentlig String getName () {retur navn} offentlig ugyldig setName (String navn) {this.name = name} offentlig String getDirectors () {return direktører} offentlig ugyldig setDirectors (String direktører) {this.directors = direktører} offentlig int getRuntime () {retur kjøretid} offentlig ugyldig setRuntime (int kjøretid) {this.runtime = kjøretid} offentlig int getReleased ( ) {return released} public void setReleased (int released) {this.released = released} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @ Override public String toString () { returner 'Film [name =' + name + ', regissører =' + regissører + ', runtime =' + runtime + ', utgitt =' + utgitt + ', cast =' + cast + ']'}}

Implementering av SAX Handler:

hva er metode skjule i java

Vi kommer til å utvide org.xml.sax.helpers. StandardHandler-klasse som gir mange tilbakekallingsmetoder og vil overstyre følgende metoder:

startElement () - Denne metoden blir kalt når en tag startes

endElement() - Denne metoden blir kalt når det oppstår slutten på en kode

tegn() - Denne metoden blir kalt når det oppstår tekstdata

Merk: Det er mange andre tilbakekallingsmetoder som startDocument (), endDocument () osv. Som kan overstyres om nødvendig.

pakke co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributter import org.xml.sax.helpers.DefaultHandler offentlig klasse SAXHandler utvider DefaultHandler {DVD dvd = ny DVD ( ) ListmovieList = ny ArrayList () Filmfilm = null Stringinnhold = null offentlig ugyldig startElement (String namespaceURI, String localName, String qname, Attributts attributter) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('name') dvd.setName (dvdName)} ellers hvis (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 'regissører': movie.setDirectors (content) break case 'released': movie.setReleased (Integer.parseInt (innhold)) break case 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} offentlig tomrom chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} public DVD getDVD () {return dvd}}

Testing av SAX Handler
La oss nå teste SAXHandler. Nedenfor er testklassen SAXTest hvor vi først får en forekomst av SAXParser fra SAXParserFactory og kaller analysemetoden som tar to argumenter: En fil og en behandlerforekomst.

pakke 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 offentlig klasse SAXTest {offentlig statisk ugyldig hoved (String [] args) kaster ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParsFactor = SAXParserFactor = SAXParserFactor parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Liste over filmer = dvd.getMovies () System.out.println ('DVD-navn:' + dvd.getName ()) for (Filmfilm: filmer) {System.out.println (film)}}}

Når du utfører SAXTest-klassen, får du utdataene nedenfor:

Merk : Hvis du prøver å analysere en XML-fil med forskjellige strukturer fra films.xml, må koden i metodene startElement () og endElement () endres.

Hvis du er interessert i å prøve koden selv, last ned koden
[buttonleads form_title = ”Last ned kode” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Last ned kode”]

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet, så kommer vi tilbake til deg.

Relaterte innlegg: