Razčlenitev datoteke XML z uporabo razčlenjevalnika SAX



Java ponuja številne načine za razčlenitev datoteke XML, kot je razčlenitev datoteke XML s pomočjo razčlenjevalnika DOM, razčlenjevalnika SAX ali razčlenjevalnika StAX.

Java ponuja številne načine za razčlenitev datoteke XML. Na primer, razčlenitev datoteke XML z uporabo razčlenjevalnika DOM, razčlenjevalnika SAX ali razčlenjevalnika StAX. V tej objavi bomo videli, kako razčleniti datoteko XML z uporabo razčlenjevalnika SAX





Preden se lotimo podrobnosti razčlenjevanja datotek XML z uporabo razčlenjevalnika SAX, najprej poglejmo, kakšna je razlika med razčlenjevanjem po različnih razčlenjevalcih in kdaj izbrati eno pred drugo.

SAX razčlenjevalnik - SAX je kratica za Simple API for XML. SAX Parser razčleni datoteko XML vrstico za vrstico in sproži dogodke, ko v datoteki XML naleti na začetno oznako, zaključno oznako ali podatke o znakih. Zato se razčlenjevalnik SAX imenuje razčlenjevalnik, ki temelji na dogodkih



DOM razčlenjevalnik - DOM je kratica za Document Object Model. Za razliko od razčlenjevalnika SAX razčlenjevalnik DOM naloži celotno datoteko XML v pomnilnik in ustvari drevesno strukturo, kjer vsako vozlišče v drevesu predstavlja komponento datoteke XML. Z razčlenjevalnikom DOM lahko ustvarjate vozlišča, odstranjujete vozlišča, spreminjate njihovo vsebino in prečkate hierarhijo vozlišč. DOM zagotavlja največjo prilagodljivost pri delu z datotekami XML, vendar ima stroške potencialno velikega pomnilniškega odtisa in pomembne zahteve procesorja v primeru velikih datotek XML

StAX razčlenjevalnik - StAX je kratica za Streaming API za XML. Razčlenjevalniki, ki temeljijo na toku, so zelo koristni, če ima vaša aplikacija omejitve pomnilnika. Na primer mobilni telefon z Java Micro Edition. Če mora vaša aplikacija hkrati obdelati več zahtev, na primer strežnik aplikacij, je treba uporabiti razčlenjevalnik StAX.

Razčlenitev, ki temelji na toku, lahko nadalje razvrstimo med:

Povlecite razčlenjevanje - Pri razčlenjevanju z vlečenjem odjemalska aplikacija zahteva metode v knjižnici za razčlenjevanje XML, kadar potrebuje interakcijo z naborom podatkov XML. Z drugimi besedami, odjemalec dobi podatke XML le, kadar to izrecno zahteva.



Potisno razčlenitev - Pri razčlenjevanju potiskov je razčlenjevalnik XML tisti, ki potisne podatke XML do odjemalca, ko naleti na elemente v naboru podatkov XML. Z drugimi besedami, razčlenjevalnik podatke pošlje aplikaciji ne glede na to, ali je aplikacija pripravljena na uporabo ali ne.

Primerjava med razčlenjevalnikom SAX, DOM in StAX:

Spodnja tabela povzema značilnosti razčlenjevalnika SAX, DOM in StAX

Java_bloge_2

Zdaj, ko poznamo različne razčlenjevalnike, poglejmo, kako razčleniti datoteko XML z uporabo razčlenjevalnika SAX

Datoteka XML
Spodaj je datoteka XML, ki jo bomo razčlenili in izdelali predmete 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

Struktura projekta
Tu je posnetek zaslona strukture projekta v Eclipse IDE

Tu je DVD razred, ki vsebuje seznam filmskih predmetov

paket co.edureka.parsers.sax import java.util.List javni razred DVD {ime zasebnega niza zasebni seznam filmov javni niz getName () {return ime} javna praznina setName (ime niza) {this.name = name} javni seznam getMovies () {return movies} javni void setMovies (seznam filmov) {this.movies = movies}}

Filmski objekt ima lastnosti, kot so ime, režiserji, čas izvajanja (trajanje) filma, leto izdaje in igralska zasedba filma

paket co.edureka.parsers.sax javni razred film {ime zasebnega niza zasebno Direktorji nizov zasebno int runtime zasebno int sproščeno zasebno Niz oddani javni String getName () {return ime} javna void setName (ime niza) {this.name = name} javni String getDirectors () {return directors} javna void setDirectors (String directors) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {vrnjeno sproščeno} javna void setReleased (int sproščeno) {this.released = sprošteno} javni niz getCast () {return cast} javna void setCast (niz nizov) {this.cast = cast} @Override javni niz toString () { vrni 'Movie [name =' + name + ', directors =' + directors + ', runtime =' + runtime + ', sprosti =' + sprosti + ', cast =' + cast + ']'}}

Implementacija SAX Handlerja:

Razširili bomo org.xml.sax.helpers. Razred DefaultHandler, ki ponuja številne metode povratnega klica in bo preglasil naslednje metode:

startElement () - Ta metoda se pokliče, ko naletimo na začetek oznake

kako namestiti php 7 na Windows 10

endElement () - Ta metoda se pokliče, ko naletimo na konec oznake

znakov () - Ta metoda se pokliče, ko naletimo na nekatere besedilne podatke

Opomba: Obstaja veliko drugih načinov povratnega klica, kot so startDocument (), endDocument () itd., Ki jih je mogoče po potrebi preglasiti.

paket co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler javni razred SAXHandler extends DefaultHandler {DVD dvd = nov DVD ( ) ListmovieList = new ArrayList () Movie movie = null String content = null public void startElement (String namespaceURI, 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 ) {case 'movie': movieList.add (movie) break case 'name': movie.setName (content) break case 'directors': movie.setDirectors (content) break case 'release': movie.setReleased (Integer.parseInt (vsebina)) case primera '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)} javni DVD getDVD () {return dvd}}

Testiranje SAX Handlerja
Zdaj pa preizkusimo naš SAXHandler. Spodaj je testni razred SAXTest, kjer najprej dobimo primerek SAXParser iz SAXParserFactory in pokličemo metodo razčlenjevanja, ki ima dva argumenta: datoteko in primerek vodnika.

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 javni razred SAXTest {public static void main (String [] args) vrže ParserConfigurationException, SAXException, IOException {SAXParserFactory parxserserserfactor parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Pot poti = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Seznam filmov = dvd.getMovies () System.out.println ('Ime DVD-ja:' + dvd.getName ()) za (Filmski film: filmi) {System.out.println (film)}}}

Ob izvedbi razreda SAXTest boste dobili spodnji izhod:

Opomba : Če poskušate razčleniti datoteko XML z različnimi strukturami od movies.xml, je treba spremeniti kodo v metodah startElement () in endElement ().

Če želite kodo preizkusiti sami, jo prenesite
[buttonleads form_title = ”Prenos kode” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Prenos kode”]

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje in se vam bomo javili.

Sorodne objave: