XML failo analizavimas naudojant SAX analizatorių



„Java“ pateikia daug būdų, kaip analizuoti XML failą, pvz., XML failo analizavimas naudojant DOM analizatorių, SAX analizatorių arba „StAX“ analizatorių.

„Java“ pateikia daug būdų, kaip išanalizuoti XML failą. Pavyzdžiui, XML failo analizavimas naudojant DOM analizatorių, SAX analizatorių arba „StAX“ analizatorių. Šiame įraše pamatysime, kaip analizuoti XML failą naudojant SAX analizatorių





Prieš pradėdami nagrinėti išsamią informaciją, kaip analizuoti XML failus naudojant SAX analizatorių, pirmiausia pažiūrėkime, koks yra skirtumas tarp analizavimo per skirtingus analizatorius ir kada pasirinkti vieną iš kitų.

SAX analizatorius - SAX yra XML paprastosios API trumpinys. „SAX Parser“ analizuoja XML failą eilutėmis ir suaktyvina įvykius, kai XML faile susiduria atidarymo žymos, uždarymo žymos ar simbolių duomenys. Štai kodėl SAX analizatorius vadinamas įvykių analizatoriumi



DOM analizatorius - DOM yra dokumento objekto modelio akronimas. Skirtingai nuo SAX analizatoriaus, DOM analizatorius įkelia visą XML failą į atmintį ir sukuria medžio struktūrą, kurioje kiekvienas medžio mazgas atspindi XML failo komponentą. Naudodami DOM analizatorių galite sukurti mazgus, pašalinti mazgus, pakeisti jų turinį ir pereiti mazgų hierarchiją. DOM suteikia maksimalų lankstumą dirbant su XML failais, tačiau tai kainuoja potencialiai didelę atminties vietą ir didelius procesoriaus reikalavimus, jei yra dideli XML failai

kuo skiriasi hashmap ir hashtable

„StAX“ analizatorius - „StAX“ yra „Streaming API for XML“ akronimas. Srauto analizatoriai yra labai naudingi, kai jūsų programoje yra atminties apribojimų. Pavyzdžiui, mobilusis telefonas, kuriame veikia „Java Micro Edition“. Panašiai, jei jūsų programai reikia vienu metu apdoroti kelias užklausas, pavyzdžiui, programų serverį, turėtų būti naudojamas „StAX“ analizatorius.

Srauto analizavimas gali būti toliau klasifikuojamas kaip:

Traukite analizavimą - Traukiant analizuoti, kliento programa reikalauja metodų XML analizavimo bibliotekoje, kai jai reikia sąveikauti su XML duomenų rinkiniu. Kitaip tariant, klientas gauna XML duomenis tik tada, kai to aiškiai paprašo.



Stumkite analizavimą - Atliekant išankstinį analizavimą, XML analizatorius perduoda klientui XML duomenis, kai jis susiduria su elementais XML duomenų rinkinyje. Kitaip tariant, analizatorius duomenis siunčia programai, nepaisant to, ar programa yra pasirengusi juos naudoti, ar ne.

SAX, DOM ir StAX analizatoriaus palyginimas:

Žemiau esančioje lentelėje pateikiamos SAX, DOM ir StAX analizatoriaus funkcijos

Java_bloge_2

Dabar, kai žinome apie skirtingus analizatorius, pažiūrėkime, kaip analizuoti XML failą naudojant SAX analizatorių

XML failas
Žemiau yra XML failas, kurį ketiname išanalizuoti ir sukonstruoti „Java“ objektus

„The Bourne Identity“ Dougas Limanas 119 Mattas Damonas, Franka Potente 2002 „Bourne“ viršenybė Paulas Greengrassas 108 Mattas Damonas, Franka Potente, Joanas Allenas 2004 „Bourne‘o ultimatumas“ Paulas Greengrassas 115 Mattas Damonas, Edgaras Ramirezas, Joanas Allenas 2007 „Bourne'o palikimas“ Tony Gilroy 135 Jeremy Renneris , Rachel Weisz, Edwardas Nortonas 2012 m

Projekto struktūra
Čia pateikiama „Eclipse IDE“ projekto struktūros ekrano kopija

Čia yra DVD klasė, kurioje yra filmo objektų sąrašas

paketas co.edureka.parsers.sax importuoti 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 () {grąžinti filmus} public void setFilmai (Filmų sąrašas) {this.movies = filmai}}

Filmo objektas turi tokias savybes kaip vardas, režisieriai, filmo vykdymo laikas (trukmė), išleidimo metai ir filmo aktoriai

paketas co.edureka.parsers.sax public class Filmas {private Stygos pavadinimas private Styginių režisieriai 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 director) {this.directors = directorors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {grąžinta išleista} public void setReleased (int release) {this.released = atbrīvota} public String getCast () {return cast} public void setCast (eilutė perduota) {this.cast = cast} @Paisyti viešą eilutę toString () { grąžinti „Filmas [vardas = '+ vardas +', režisieriai = '+ režisieriai +', vykdymo laikas = '+ vykdymo laikas +', išleistas = '+ išleistas +', aktorius = '+ perduotas +'] '}}

„SAX Handler“ diegimas:

kaip nuskaityti Java simbolį

Mes ketiname išplėsti org.xml.sax.helpers. „DefaultHandler“ klasė, kurioje yra daugybė atgalinio skambinimo metodų ir kuri pakeis šiuos metodus:

startElement () - Šis metodas iškviečiamas, kai pastebima žymos pradžia

endElement () - Šis metodas iškviečiamas, kai aptinkama žymos pabaiga

personažai() - Šis metodas iškviečiamas, kai susiduriama su kai kuriais teksto duomenimis

Pastaba: Yra daugybė kitų atgalinio skambinimo metodų, tokių kaip startDocument (), endDocument () ir kt., Kuriuos prireikus galima nepaisyti.

paketas co.edureka.parsers.sax importuoti java.util.ArrayList importuoti java.util.List importuoti org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler viešoji klasė SAXHandler išplečia DefaultHandler {DVD dvd = naujas DVD ( ) ListmovieList = new ArrayList () Kino filmas = null String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes attributes) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('vardas') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {jungiklis (qname ) {case 'movie': movieList.add (movie) pertraukos atvejis 'name': movie.setName (content) pertraukos atvejis 'rendezers': movie.setDirectors (content) pertraukos atvejis 'release': movie.setReleased (Integer.parseInt (turinys)) pertraukos atvejis „runtime“: movie.setRuntime (Integer.parseInt (content)) pertraukos atvejis „cast“: movie.setCast (content) pertrauka „dvd“: dvd.setMovies (movieList) break}} public void chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} public DVD getDVD () {return dvd}}

„SAX Handler“ testavimas
Dabar išbandykime savo „SAXHandler“. Žemiau pateikiama bandymo klasė „SAXTest“, kur pirmiausia gauname „SAXParser“ egzempliorių iš „SAXParserFactory“ ir iškviečiame analizės metodą, kuris apima du argumentus: „File“ ir „handler“ egzempliorių.

paketas co.edureka.parsers.sax importuoti java.io.IOException importuoti java.nio.file.Path importuoti java.nio.file.Paths importuoti java.util.List importuoti javax.xml.parsers.ParserConfigurationException importuoti javax.xml.parsers .SAXParser importuoti javax.xml.parsers.SAXParserFactory importuoti org.xml.sax.SAXException viešosios klasės SAXTest {public static void main (eilutės [] argumentai) meta ParserConfigurationException, SAXException, IOException {SAXParsereractory = SAXParsereractory = SAXParserFactory parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Kelio kelias = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Išvardykite filmus = dvd.getMovies () System.out.println ('DVD Name:' + dvd.getName ()] (Movie Movie: movies) {System.out.println (movie)}}}

Vykdydami „SAXTest“ klasę gausite žemiau pateiktą išvestį:

Pastaba: Jei bandote analizuoti XML failą, kurio struktūra skiriasi nuo movies.xml, reikia pakeisti metodų startElement () ir endElement () kodą.

Jei norite išbandyti kodą patys, atsisiųskite kodą
[buttonleads form_title = „Atsisiųsti kodą“ redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = „Atsisiųsti kodą“]

Turite mums klausimą? Prašau paminėti tai komentarų skiltyje ir mes su jumis susisieksime.

Susijusios žinutės: