XML-tiedoston jäsentäminen SAX-jäsentimen avulla



Java tarjoaa useita tapoja jäsentää XML-tiedosto, kuten jäsentää XML-tiedosto DOM-jäsentimen, SAX-jäsentimen tai StAX-jäsentimen avulla.

Java tarjoaa useita tapoja jäsentää XML-tiedosto. Esimerkiksi XML-tiedoston jäsentäminen DOM-jäsentimen, SAX-jäsentimen tai StAX-jäsentimen avulla. Tässä viestissä näemme, miten XML-tiedosto jäsennetään SAX-jäsentimen avulla





Ennen kuin ryhdymme yksityiskohtiin XML-tiedostojen jäsentämisestä SAX-jäsentimellä, katsotaan ensin, mikä ero on erilaisten jäsentäjien jäsentämisen välillä ja milloin valita yksi toisen yli.

SAX-jäsennin - SAX on lyhenne sanoista Simple API for XML. SAX-jäsentäjä jäsentää XML-tiedoston rivi kerrallaan ja laukaisee tapahtumat, kun se kohtaa XML-tiedoston avaavan tunnisteen, sulkutunnisteen tai merkkitiedot. Siksi SAX-jäsennintä kutsutaan tapahtumapohjaiseksi jäsentäjäksi



DOM-jäsennin - DOM on lyhenne sanoista Document Object Model. Toisin kuin SAX-jäsennin, DOM-jäsennin lataa koko XML-tiedoston muistiin ja luo puurakenteen, jossa kukin puun solmu edustaa XML-tiedoston komponenttia. DOM-jäsentimellä voit luoda solmuja, poistaa solmuja, muuttaa niiden sisältöä ja kulkea solmuhierarkian läpi. DOM tarjoaa maksimaalisen joustavuuden työskennellessään XML-tiedostojen kanssa, mutta siihen liittyy mahdollisesti suurten muistinjälkien kustannukset ja merkittävät prosessorivaatimukset suurten XML-tiedostojen tapauksessa

StAX-jäsennin - StAX on lyhenne sanoista Streaming API for XML. Suoratoistopohjaiset jäsentimet ovat erittäin hyödyllisiä, kun sovelluksessasi on muistirajoituksia. Esimerkiksi matkapuhelin, jossa on Java Micro Edition. Vastaavasti, jos sovelluksesi on käsiteltävä useita pyyntöjä samanaikaisesti, esimerkiksi sovelluspalvelin, tulisi käyttää StAX-jäsennintä.

Suoratoistopohjainen jäsentäminen voidaan edelleen luokitella seuraavasti:

Vedä jäsennys - Pull-jäsentämisessä asiakassovellus pyytää menetelmiä XML-jäsentekirjastoon, kun sen on oltava vuorovaikutuksessa XML-infosetin kanssa. Toisin sanoen asiakas saa XML-tietoja vain silloin, kun se sitä nimenomaisesti pyytää.



Työnnä jäsennys - Push-jäsentelyssä XML-jäsennin työntää XML-tiedot asiakkaalle, kun se kohtaa elementtejä XML-tietojoukossa. Toisin sanoen jäsentäjä lähettää tiedot sovellukselle riippumatta siitä, onko sovellus valmis käyttämään sitä vai ei.

ja viimeistele java

SAX-, DOM- ja StAX-jäsentimien vertailu:

Alla olevassa taulukossa on yhteenveto SAX-, DOM- ja StAX-jäsentimen ominaisuuksista

Java_bloge_2

Nyt kun tiedämme erilaisista jäsentäjistä, katsotaanpa, miten XML-tiedosto jäsennetään SAX-jäsentimellä

XML-tiedosto
Alla on XML-tiedosto, jonka aiomme jäsentää ja rakentaa Java-objekteja

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

Projektin rakenne
Tässä on näyttökuva projektirakenteesta Eclipse IDE: ssä

Tässä on DVD-luokka, jolla on luettelo elokuvakohteista

package co.edureka.parsers.sax import java.util.List public class DVD {private String name private List movies movies public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {palauta elokuvat} public void setElokuvat (Luetteloluettelot) {this.movies = elokuvat}}

Elokuvaobjektilla on ominaisuuksia, kuten nimi, ohjaajat, elokuvan ajonaika (kesto), julkaisuvuosi ja elokuvan näyttelijät

paketti co.edureka.parsers.sax julkinen luokka Elokuva {yksityinen Merkkijonon nimi yksityinen Merkkijonojohtajat private int ajonaikainen private int julkaissut yksityiset Merkkijono näyttelijät julkinen merkkijono getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return direktors} public void setDirectors (String director) {this.directors = directorors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {palautus julkaistu} public void setReleased (int vapautettu) {this.released = vapautettu} julkinen merkkijono getCast () {return cast} julkinen void setCast (merkkijono) {this.cast = cast} @Override public String toString () { return 'Elokuva [nimi =' + nimi + ', ohjaajat =' + ohjaajat + ', ajonaikainen =' + ajonaikainen ', vapautettu =' + vapautettu ', näyttelijä =' + näyttelijä + ']'}}

SAX-käsittelijän käyttöönotto:

Aiomme laajentaa org.xml.sax.helpers-palvelua. DefaultHandler-luokka, joka tarjoaa monia soittomenetelmiä ja ohittaa seuraavat menetelmät:

startElement () - Tätä menetelmää kutsutaan, kun tagin aloitus tapahtuu

endElement () - Tätä menetelmää kutsutaan, kun tagin loppu kohdataan

Windows lisää jaavan polkuun

merkkiä () - Tätä menetelmää kutsutaan, kun tekstitietoja esiintyy

Huomaa: On olemassa monia muita soittopyyntömenetelmiä, kuten startDocument (), endDocument () jne., Jotka voidaan ohittaa tarvittaessa.

paketti 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 laajentaa DefaultHandler {DVD dvd = uusi DVD ( ) ListmovieList = new ArrayList () Elokuva = null String content = null public void startElement (Stringin nimitilaURI, String localName, String qname, Attributes attribuutit) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('nimi') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (Stringin nimitilaURI, String localName, String qname) {kytkin (qname ) {tapaus 'elokuva': movieList.add (elokuva) taukotapa 'nimi': movie.setName (sisältö) taukotapa 'ohjaajat': movie.setDirectors (sisältö) taukotapa 'vapautettu': movie.setReleased (kokonaisluku.parseInt (content)) 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)} julkinen DVD getDVD () {return dvd}}

SAX-käsittelijän testaus
Testataan nyt SAXHandlerimme. Alla on testiluokka SAXTest, josta saamme ensin SAXParser-ilmentymän SAXParserFactory-sovelluksesta ja kutsumme jäsentämenetelmän, jossa on kaksi argumenttia: Tiedosto ja käsittelijä-ilmentymä.

paketti co.edureka.parsers.sax import java.io.IOException import java.io.file.Path import java.nio.file.Paths import java.util.List import javax.xml.parsers.ParserConfigurationException import javax.xml.parsers .SAXParser tuo javax.xml.parsers.SAXParserFactory tuonti org.xml.sax.SAXException julkinen luokka SAXTest {public static void main (String [] args) heittää ParserConfigurationException, SAXException, IOException {SAXParsererer = ActiveSpacePower = ParxParserFactory = SAXParserFactory parserFactor.newSAXParser () SAXHandler-käsittelijä = uusi SAXHandler () Polun polku = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Luettelo elokuvista = dvd.getMovies () System.out.println ('DVD-nimi:' + dvd.getName ()) kohteelle (Movie Movie: movies) {System.out.println (movie)}}}

Kun suoritat SAXTest-luokan, saat alla olevan tuloksen:

Huomautus : Jos yrität jäsentää XML-tiedostoa, jonka rakenne on erilainen kuin movies.xml, menetelmien startElement () ja endElement () koodeja on muutettava.

Lataa koodi, jos olet kiinnostunut kokeilemaan koodia itse
[buttonleads form_title = ”Lataa koodi” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Lataa koodi”]

Onko sinulla kysymys meille? Mainitse se kommenttiosassa ja palaamme sinuun.

Aiheeseen liittyvät julkaisut: