Parsējot XML failu, izmantojot SAX Parser



Java nodrošina daudzus XML faila parsēšanas veidus, piemēram, XML faila parsēšanu, izmantojot DOM parsētāju, SAX parsētāju vai StAX parsētāju.

Java piedāvā daudz veidu, kā parsēt XML failu. Piemēram, XML faila parsēšana, izmantojot DOM parsētāju, SAX parsētāju vai StAX parsētāju. Šajā ziņojumā mēs redzēsim, kā parsēt XML failu, izmantojot SAX parsētāju





Pirms sākat detalizēti uzzināt, kā parsēt XML failus, izmantojot SAX parsētāju, vispirms apskatīsim, kāda ir atšķirība starp parsēšanu, izmantojot dažādus parsētājus, un kad izvēlēties vienu no otra.

SAX parsētājs - SAX ir akronīms Simple API for XML. SAX parsētājs parsē XML failu pa rindām un izraisa notikumus, kad XML failā tiek sastādīts sākuma tags, aizvēršanas tags vai rakstzīmju dati. Tāpēc SAX parsētāju sauc par notikumu parsētāju



DOM parsētājs - DOM ir dokumenta objekta modeļa saīsinājums. Atšķirībā no SAX parsētāja DOM parsētājs ielādē visu XML failu atmiņā un izveido koka struktūru, kur katrs koka mezgls apzīmē XML faila sastāvdaļu. Izmantojot DOM parsētāju, varat izveidot mezglus, noņemt mezglus, mainīt to saturu un šķērsot mezglu hierarhiju. DOM nodrošina maksimālu elastību, strādājot ar XML failiem, taču tas rada izmaksas par potenciāli lielu atmiņas nospiedumu un ievērojamām procesora prasībām lielu XML failu gadījumā

StAX parsētājs - StAX ir Streaming API for XML saīsinājums. Parsatori, kuru pamatā ir straume, ir ļoti noderīgi, ja lietojumprogrammai ir atmiņas ierobežojumi. Piemēram, mobilais tālrunis, kurā darbojas Java Micro Edition. Līdzīgi, ja jūsu lietojumprogrammai vienlaikus jāapstrādā vairāki pieprasījumi, piemēram, lietojumprogrammu serveris, jāizmanto StAX parsētājs.

Parsēšanā balstītu parsēšanu var turpmāk klasificēt kā:

Vilkt parsēšanu - Vilkšanas parsēšanas laikā klienta lietojumprogramma pieprasa metodes XML parsēšanas bibliotēkā, kad tai ir nepieciešams mijiedarboties ar XML infoseti. Citiem vārdiem sakot, klients saņem XML datus tikai tad, kad tas tos skaidri pieprasa.



Push parsēšana - Stumšanas parsēšanas laikā XML parsētājs izvirza klientam XML datus, kad tas sastopas ar elementiem XML infokopā. Citiem vārdiem sakot, parsētājs nosūta datus lietojumprogrammai neatkarīgi no tā, vai lietojumprogramma ir gatava tos izmantot vai nē.

SAX, DOM un StAX parsētāja salīdzinājums:

Zemāk esošajā tabulā ir apkopotas SAX, DOM un StAX parsētāja funkcijas

Java_bloge_2

Tagad, kad mēs zinām par dažādiem parsētājiem, redzēsim, kā parsēt XML failu, izmantojot SAX parsētāju

XML fails
Zemāk ir XML fails, kuru mēs analizēsim un izveidosim Java objektus

Bourne Identity Doug Liman 119 Matt Damon, Franka Potente 2002 Bourne Supremacy Paul Greengrass 108 Matt Damon, Franka Potente, Joan Allen 2004 Bourne Ultimatum Paul Greengrass 115 Matt Damon, Edgar Ramirez, Joan Allen 2007 The Bourne Legacy Tony Gilroy 135 Jeremy Renner , Reičela Veisa, Edvards Nortons 2012

Projekta struktūra
Šeit ir Eclipse IDE projekta struktūras ekrānuzņēmums

Šeit ir DVD klase, kurā atrodas filmu objektu saraksts

pakete co.edureka.parsers.sax importēt java.util.List public class DVD {private String name private List filmas public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {atgriešanās filmas} public void setFilmas (Filmu saraksts) {this.movies = filmas}}

Filmas objektam ir tādas īpašības kā nosaukums, režisori, filmas izpildes laiks (ilgums), izlaišanas gads un filmas sastāvs

pakete co.edureka.parsers.sax public class Filma {private Virknes nosaukums private Virknes režisori private int izpildlaika private int atbrīvots private Virkne cast public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return directorors} public void setDirectors (String director) {this.directors = directorors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return release} public void setReleased (int atbrīvots) {this.released = atbrīvots} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { atgriezt 'Filma [vārds =' + vārds + ', režisori =' + režisori + ', izpildlaiks =' + izpildlaiks + ', izlaists =' + izlaists + ', cast =' + cast + ']'}}

SAX Handler ieviešana:

Mēs paplašināsim org.xml.sax.helpers. DefaultHandler klase, kas nodrošina daudzas atzvanīšanas metodes un ignorēs šādas metodes:

startElement () - Šī metode tiek izsaukta, kad tiek konstatēts taga sākums

endElement () - Šī metode tiek izsaukta, kad tiek parādīts taga beigas

rakstzīmes () - Šī metode tiek izsaukta, kad rodas daži teksta dati

Piezīme. Ir daudz citu atzvanīšanas metožu, piemēram, startDocument (), endDocument () utt., Kuras vajadzības gadījumā var ignorēt.

savienības klauzula ir pieradusi
pakete co.edureka.parsers.sax importēt java.util.ArrayList importēt java.util.List importēt org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler publiskā klase SAXHandler paplašina DefaultHandler {DVD dvd = new DVD ( ) ListmovieList = new ArrayList () Filmas filma = null String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes attributes) {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) {slēdzis (qname ) {case 'movie': movieList.add (movie) pārtraukuma gadījums 'name': movie.setName (content) break case 'rendezors': movie.setDirectors (content) break case 'atbrīvots': movie.setReleased (Integer.parseInt (saturs)) pārtraukuma gadījums 'runtime': movie.setRuntime (Integer.parseInt (content)) pārtraukuma gadījums 'cast': movie.setCast (content) pārtraukuma gadījums 'dvd': dvd.setMovies (movieList) break}} public void čara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} public DVD getDVD () {return dvd}}

Pārbauda SAX Handler
Tagad pārbaudīsim mūsu SAXHandler. Zemāk ir testa klase SAXTest, kur mēs vispirms iegūstam SAXParser gadījumu no SAXParserFactory un izsaucam parsēšanas metodi, kurai nepieciešami divi argumenti: File un Handler instance.

pakete co.edureka.parsers.sax importēt java.io.IOException importēt java.nio.file.Path importēt java.nio.file.Paths importēt java.util.List importēt javax.xml.parsers.ParserConfigurationException importēt javax.xml.parsers .SAXParser importēt javax.xml.parsers.SAXParserFactory importēt org.xml.sax.SAXException publiskā klase SAXTest {public static void main (String [] args) throws ParserConfigurationException, SAXException, IOException {SAXParsereractory = SAXParsereractory = SAXParserFactory parserFactor.newSAXParser () SAXHandler apstrādātājs = jauns SAXHandler () Ceļa ceļš = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), apdarinātājs) DVD dvd = handler.getDVD ( ) Sarakstā filmas = dvd.getMovies () System.out.println ('DVD nosaukums:' + dvd.getName ()) vietnei [Movie movie: filmas] {System.out.println (movie)}}}

Veicot SAXTest klasi, jūs iegūsiet šādu izvadi:

Piezīme : Ja mēģināt parsēt XML failu ar atšķirīgu struktūru no filmas.xml, kods metodēs startElement () un endElement () ir jāmaina.

Ja jūs vēlaties izmēģināt kodu pats, lejupielādējiet kodu
[buttonleads form_title = ”Lejupielādēt kodu” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Lejupielādēt kodu”]

Vai mums ir jautājums? Lūdzu, pieminējiet to komentāru sadaļā, un mēs ar jums sazināsimies.

Saistītās ziņas: