XML-faili sõelumine SAX-parseri abil



Java pakub mitmeid viise XML-faili sõelumiseks, näiteks XML-faili sõelumine DOM-parseri, SAX-parseri või StAX-i parseri abil.

Java pakub mitmeid viise XML-faili sõelumiseks. Näiteks XML-faili parsimine DOM-parseri, SAX-parseri või StAX-i parseri abil. Selles postituses näeme, kuidas XML-faili sõeluda SAX-parseri abil





Enne kui tutvuda üksikasjadega XML-failide sõelumiseks SAX-i parseri abil, vaatame kõigepealt, mis vahe on erinevate parserite kaudu sõelumisel ja millal üks neist teise valida.

SAXi parser - SAX on XML-i lihtsa API lühend. SAX-i parser sõelub XML-faili ridade kaupa ja käivitab sündmused, kui kohtab XML-failis avamismärki, sulgemismärki või tähemärgi andmeid. Seetõttu nimetatakse SAX-i parserit sündmusepõhiseks parseriks



DOM-i parser - DOM on dokumendi objektimudeli akronüüm. Erinevalt SAX-i parserist laadib DOM-i parser kogu XML-faili mällu ja loob puu struktuuri, kus iga puu sõlm tähistab XML-faili komponenti. DOM-i parseri abil saate luua sõlme, eemaldada sõlme, muuta nende sisu ja läbida sõlmede hierarhia. DOM pakub XML-failidega töötamisel maksimaalset paindlikkust, kuid sellega kaasnevad potentsiaalselt suure mälu jala kulud ja suurte XML-failide korral suured protsessori nõuded

StAXi parser - StAX on XML-i voogesituse API lühend. Voogupõhised parsandid on väga kasulikud, kui teie rakendusel on mälupiiranguid. Näiteks mobiiltelefon, kus töötab Java Micro Edition. Samamoodi, kui teie rakendus peab töötlema korraga mitu taotlust, näiteks rakendusserver, tuleks kasutada StAX-i parserit.

Voogupõhist sõelumist saab liigitada järgmiselt:

Tõmba parsimine - Tõmba parsimisel nõuab kliendirakendus meetodeid XML-i sõelumise teegis, kui see peab suhtlema XML-i infosetiga. Teisisõnu saab klient XML-andmeid ainult selgesõnaliselt küsides.



Lükake parsimist - Push-sõelumisel lükkab XML-parser XML-i andmed kliendile, kui ta kohtub elementidega XML-i infosetis. Teisisõnu, parser saadab andmed rakendusele, olenemata sellest, kas rakendus on valmis neid kasutama või mitte.

SAX, DOM ja StAX parseri võrdlus:

Allolevas tabelis on kokku võetud SAX, DOM ja StAX parseri funktsioonid

Java_bloge_2

Nüüd, kui me teame erinevatest parseritest, vaatame, kuidas XML-faili sõeluda SAX-i parseri abil

XML-fail
Allpool on XML-fail, mida kavatseme Java-objekte sõeluda ja koostada

Bourne'i identiteet Doug Liman 119 Matt Damon, Franka Potente 2002 Bourne'i ülemvõim Paul Greengrass 108 Matt Damon, Franka Potente, Joan Allen 2004 Bourne'i ultimaatum Paul Greengrass 115 Matt Damon, Edgar Ramirez, Joan Allen 2007 Bourne'i pärand Tony Gilroy 135 Jeremy Renner , Rachel Weisz, Edward Norton 2012

Projekti struktuur
Siin on ekraanipilt projekti ülesehitusest Eclipse IDE-s

Siin on DVD klass, kuhu kuulub filmiobjektide loend

pakett co.edureka.parsers.sax import java.util.List public class DVD {private Stringi nimi private list filmid public String getName () {return name} public void setName (Stringi nimi) {this.name = name} public List getMovies () {tagastavad filmid} public void setFilmid (Loetlege filme) {this.movies = filmid}}

Filmiobjektil on sellised omadused nagu nimi, režissöörid, filmi kestus (kestus), väljalaskeaasta ja filmi osatäitjad

pakett co.edureka.parsers.sax public class Film {private Stringi nimi private Stringi režissöörid 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 direktors} public void setDirectors (String directorers) {this.directors = directorors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {tagastamine vabastatud} public void setReleased (int release) {this.released = release} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Orride public String toString () { tagastama 'Film [nimi =' + nimi + ', režissöörid =' + režissöörid + ', käitusaeg =' + käitusaeg + ', välja antud =' + välja antud + ', näitama =' + valatud + ']'}}

SAX-käitleja juurutamine:

Laiendame org.xml.sax.helpers. Klass DefaultHandler, mis pakub palju tagasihelistamismeetodeid ja alistab järgmised meetodid:

startElement () - Seda meetodit nimetatakse siis, kui märgendi algus on tekkinud

endElement () - Seda meetodit kutsutakse, kui märgendi lõpp on leitud

tähemärki () - Seda meetodit nimetatakse siis, kui tekivad mõned tekstiandmed

Märkus. On palju muid tagasihelistusmeetodeid, nagu startDocument (), endDocument () jne, mida saab vajaduse korral tühistada.

pakett co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler avalik klass SAXHandler laiendab DefaultHandler {DVD dvd = uus DVD ( ) ListmovieList = new ArrayList () Filmi film = null Stringi sisu = null public void startElement (Stringi nimeruumURI, String localName, Stringi qname, Atribuutide atribuudid) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('nimi') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {switch (qname ) {juhtum 'film': movieList.add (film) pausi juhtum 'nimi': movie.setName (sisu) pausi juhtum 'režissöörid': movie.setDirectors (sisu) pausi juhtum 'välja antud': movie.setReleased (Integer.parseInt (sisu)] 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)} avalik DVD getDVD () {return dvd}}

SAX-käitleja testimine
Nüüd proovime oma SAXHandlerit. Allpool on testiklass SAXTest, kus kõigepealt saame SAXParserFactorylt SAXParseri eksemplari ja kutsume parsimismeetodi, mis võtab kaks argumenti: faili ja käitleja eksemplari.

pakett 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 impordib org.xml.sax.SAXException avaliku klassi SAXTest {public static void main (String [] args) viskab ParserConfigurationException, SAXException, IOException {SAXParserereractory = SAXParsereractory = SAXParserFactory parserFactor.newSAXParser () SAXHandleri käitleja = uus SAXHandler () Tee tee = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), käitleja) DVD dvd = handler.getDVD ( ) Loetlege filmid = dvd.getMovies () System.out.println ('DVD nimi:' + dvd.getName ()) (Filmifilm: filmid) {System.out.println (film)}}}

SAXTest klassi käivitamisel saate järgmise väljundi:

Märge : Kui proovite sõeluda XML-faili, mille struktuurid on erinevad failist movies.xml, tuleb meetodites startElement () ja endElement () olevat koodi muuta.

Kui soovite ise koodi proovida, laadige see alla
[buttonleads form_title = ”Laadi kood alla” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Laadi kood alla”]

Kas teil on meile küsimus? Palun mainige seda kommentaaride jaotises ja võtame teiega ühendust.

Seonduvad postitused:

kuidas koostada java programme