Parsing XML File Gamit ang SAX Parser



Nagbibigay ang Java ng maraming paraan upang ma-parse ang isang XML file tulad ng pag-parse ng isang XML file gamit ang DOM parser, SAX parser o StAX parser.

Nagbibigay ang Java ng maraming paraan upang ma-parse ang isang XML file. Halimbawa, pag-parse ng isang XML file gamit ang DOM parser, SAX parser o StAX parser. Sa post na ito makikita natin kung paano mai-parse ang isang XML file gamit ang SAX parser





Bago makuha ang mga detalye sa kung paano mai-parse ang mga XML file gamit ang SAX parser, tingnan muna natin kung ano ang pagkakaiba sa pagitan ng pag-parse sa pamamagitan ng iba't ibang mga parser at kung kailan pipiliin ang isa sa isa pa.

SAX Parser - Ang SAX ay isang akronim para sa Simple API para sa XML. Ini-parse ng SAX Parser ang linya ng file ng XML sa pamamagitan ng linya at nagpapalitaw ng mga kaganapan kapag nakatagpo ito ng pagbubukas ng tag, pagsasara ng tag o data ng character sa XML file. Ito ang dahilan kung bakit tinawag na isang parser na batay sa kaganapan ang SAX parser



DOM Parser - Ang DOM ay isang acronym para sa Modelong Bagay ng Dokumento. Hindi tulad ng SAX parser DOM parser na naglo-load ang kumpletong XML file sa memorya at lumilikha ng isang istraktura ng puno kung saan ang bawat node sa puno ay kumakatawan sa isang bahagi ng XML file. Sa DOM parser maaari kang lumikha ng mga node, alisin ang mga node, baguhin ang kanilang mga nilalaman at daanan ang hierarchy ng node. Nagbibigay ang DOM ng maximum na kakayahang umangkop habang nagtatrabaho kasama ang mga XML file ngunit mayroon itong gastos ng potensyal na malaking memory footprint at makabuluhang mga kinakailangan ng processor sa kaso ng malalaking mga XML file

StAX Parser - Ang StAX ay isang akronim para sa Streaming API para sa XML. Ang mga parser na nakabatay sa stream ay lubhang kapaki-pakinabang kapag ang iyong aplikasyon ay may mga limitasyon sa memorya. Halimbawa, isang cellphone na nagpapatakbo ng Java Micro Edition. Katulad nito, kung ang iyong aplikasyon ay kailangang magproseso ng maraming mga kahilingan nang sabay-sabay, halimbawa isang application server, dapat gamitin ang parser ng StAX.

Ang pag-parse na batay sa stream ay maaaring maiuri pa bilang:

Hilahin ang Pag-parars - Sa pag-parse ng pull, ang application ng client ay tumatawag para sa mga pamamaraan sa isang XML library ng pag-parse kapag kailangan itong makipag-ugnay sa isang XML infoset. Sa madaling salita, nakakakuha lamang ang kliyente ng data ng XML nang malinaw na hinihiling nito.



Push Parsing - Sa push parsing, ito ang XML parser na nagtutulak ng XML data sa kliyente, kapag nakasalubong nito ang mga elemento sa isang XML infoset. Sa madaling salita, ipinapadala ng parser ang data sa aplikasyon anuman ang application na handa nang gamitin ito o hindi.

Paghahambing sa pagitan ng SAX, DOM at StAX parser:

Ang talahanayan sa ibaba ay nagbubuod ng mga tampok ng SAX, DOM at StAX parser

Java_bloge_2

Ngayon na alam natin ang tungkol sa iba't ibang mga parser, tingnan natin kung paano i-parse ang XML file gamit ang SAX parser

XML File
Nasa ibaba ang XML file na pupunta kaming parse at gagawa ng mga Java object

The Bourne Identity Doug Liman 119 Matt Damon, Franka Potente 2002 Ang 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

Istraktura ng Proyekto
Narito ang screen shot ng istraktura ng proyekto sa Eclipse IDE

Narito ang klase sa DVD na nagtataglay ng isang listahan ng mga object ng pelikula

kung paano sumulat ng pamamaraang tostring sa java
package co.edureka.parsers.sax import java.util.List public class DVD {pribadong pangalan ng String pribadong Listahan ng mga pelikula publiko String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {ibalik ang mga pelikula} pampubliko na walang bisa na setMovies (Listahan ng mga pelikula) {this.movies = pelikula}}

Ang object ng pelikula ay may mga katangian tulad ng pangalan, director, runtime (tagal) ng pelikula, naipalabas na taon at cast ng pelikula

package co.edureka.parsers.sax pampublikong klase Pelikula {pribadong pangalan ng String pribadong mga direktor ng String pribadong int runtime pribadong int na inilabas na pribadong String cast public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return director} public void setDirectors (String director) {this.directors = director} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return released} public void setReleased (int pinalabas) {this.released = pinakawalan} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { ibalik ang 'Pelikula [pangalan =' + pangalan + ', direktor =' + direktor + ', runtime =' + runtime + ', inilabas =' + pinakawalan + ', cast =' + cast + ']'}}

Pagpapatupad ng SAX Handler:

Ipapalawak namin ang org.xml.sax.helpers. Ang klase ng DefaultHandler na nagbibigay ng maraming mga pamamaraan ng callback at malalampasan ang mga sumusunod na pamamaraan:

startElement () - Ang pamamaraang ito ay tatawagin kapag nakatagpo ang pagsisimula ng isang tag

endElement () - Ang pamamaraang ito ay tatawagin kapag nakatagpo ang pagtatapos ng isang tag

character () - Ang pamamaraang ito ay tatawagin kapag nakatagpo ang ilang data ng teksto

Tandaan: Maraming iba pang mga pamamaraan ng callback tulad ng startDocument (), endDocument () atbp na maaaring ma-override kung kinakailangan.

package co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Atributang pag-import ng org.xml.sax.helpers.DefaultHandler pampublikong klase SAXHandler ay nagpapalawak ng DefaultHandler {DVD dvd = bagong DVD ( ) ListmovieList = bagong ArrayList () Pelikula sa pelikula = null String na nilalaman = null public void startElement (String namespaceURI, String localName, String qname, Mga Katangian ng mga katangian) {if (qname.equals ('dvd')) {String dvdName = atribut.getValue ('name') dvd.setName (dvdName)} iba pa kung (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {switch (qname ) {case 'movie': movieList.add (pelikula) break case 'name': movie.setName (content) break case 'director': movie.setDirectors (content) break case 'pinakawalan': movie.setReleased (Integer.parseInt (nilalaman)) break case 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} public void si chara cters (char [] ch, int start, int haba) {content = new String (ch, start, haba)} pampublikong DVD getDVD () {return dvd}}

Pagsubok sa SAX Handler
Ngayon subukan natin ang ating SAXHandler. Nasa ibaba ang pagsubok na klase na SAXTest kung saan una kaming nakakuha ng isang halimbawa ng SAXParser mula sa SAXParserFactory at tawagan ang parse na pamamaraan na tumatagal ng dalawang mga argumento: Isang File at isang halimbawa ng handler.

package 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 public class SAXTest {public static void main (String [] args) throws ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactory parserFactory parserFactory parserFactory parserFactory parserFactory parserFactor.newSAXParser () SAXHandler handler = bagong SAXHandler () Path path = Paths.get ('src / resources', 'films.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Maglista ng mga pelikula = dvd.getMovies () System.out.println ('Pangalan ng DVD:' + dvd.getName ()) para sa (Pelikulang pelikula: mga pelikula) {System.out.println (pelikula)}}}

Sa pagpapatupad ng SAXTest class makakakuha ka ng output sa ibaba:

Tandaan: Kung sinusubukan mong i-parse ang isang XML file na may iba't ibang mga istraktura mula sa mga pelikula.xml, kung gayon ang code sa mga pamamaraan na startElement () at endElement () ay kailangang mabago.

Kung ikaw ay interesado sa pagsubok ng code ang iyong sarili i-download ang code
[buttonleads form_title = 'Code sa Pag-download' redirect_url = https: //edureka.wistia.com/ Medias/st5gg7rp15 course_id = 44 button_text = 'I-download ang Code']

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.

Mga Kaugnay na Post: