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
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: