Analýza súboru XML pomocou analyzátora SAX



Java poskytuje mnoho spôsobov, ako analyzovať súbor XML, ako je napríklad analýza súboru XML pomocou analyzátora DOM, analyzátora SAX alebo analyzátora StAX.

Java poskytuje mnoho spôsobov, ako analyzovať súbor XML. Napríklad syntaktická analýza súboru XML pomocou analyzátora DOM, analyzátora SAX alebo analyzátora StAX. V tomto príspevku uvidíme, ako analyzovať súbor XML pomocou analyzátora SAX





Predtým, ako sa dostaneme do podrobností o tom, ako analyzovať súbory XML pomocou syntaktického analyzátora SAX, pozrime sa najskôr, aký je rozdiel medzi analýzou pomocou rôznych syntaktických analyzátorov a kedy zvoliť jednu nad druhou.

Analyzátor SAX - SAX je skratka pre Simple API for XML. Analyzátor SAX analyzuje súbor XML po riadkoch a spúšťa udalosti, keď narazí na otváraciu značku, zatváraciu značku alebo údaje o znakoch v súbore XML. Preto sa analyzátor SAX nazýva analyzátor založený na udalostiach



Analyzátor DOM - DOM je skratka pre Document Object Model. Na rozdiel od analyzátora SAX analyzátor DOM načíta celý súbor XML do pamäte a vytvorí stromovú štruktúru, kde každý uzol v strome predstavuje súčasť súboru XML. Pomocou analyzátora DOM môžete vytvárať uzly, odstraňovať uzly, meniť ich obsah a prechádzať hierarchiou uzlov. DOM poskytuje maximálnu flexibilitu pri práci so súbormi XML, prináša však náklady na potenciálne veľkú pamäťovú stopu a značné požiadavky na procesor v prípade veľkých súborov XML

Analyzátor StAX - StAX je skratka pre Streaming API pre XML. Analyzátory založené na streame sú veľmi užitočné, ak má vaša aplikácia pamäťové obmedzenia. Napríklad mobilný telefón s Java Java Edition. Podobne, ak vaša aplikácia potrebuje na spracovanie viacerých požiadaviek súčasne, napríklad na aplikačný server, mal by sa použiť syntaktický analyzátor StAX.

Analýza založená na streamoch sa dá ďalej klasifikovať ako:

Analýza ťahom - Pri analýze ťahom vyžaduje klientská aplikácia metódy v knižnici syntaktickej analýzy XML, keď potrebuje interakciu s informačnou sadou XML. Inými slovami, klient dostane údaje XML, iba ak o to výslovne požiada.



Analýza pomocou funkcie Push - Pri analýze push je to syntaktický analyzátor XML, ktorý tlačí údaje XML do klienta, keď narazí na prvky v informačnej sade XML. Inými slovami, syntaktický analyzátor odosiela údaje do aplikácie bez ohľadu na to, či je aplikácia pripravená ich použiť alebo nie.

Porovnanie analyzátora SAX, DOM a StAX:

V nasledujúcej tabuľke sú zhrnuté vlastnosti analyzátora SAX, DOM a StAX

Java_bloge_2

Teraz, keď vieme o rôznych analyzátoroch, pozrime sa, ako analyzovať súbor XML pomocou analyzátora SAX

Súbor XML
Nižšie je uvedený súbor XML, ktorý ideme analyzovať a zostrojiť objekty Java

The Bourne Identity Doug Liman 119 Matt Damon, Franka Potente 2002 Bourne Supremacy Paul Greengrass 108 Matt Damon, Franka Potente, Joan Allen 2004 Bourneovo ultimátum Paul Greengrass 115 Matt Damon, Edgar Ramirez, Joan Allen 2007 The Bourne Legacy Tony Gilroy 135 Jeremy Renner , Rachel Weisz, Edward Norton 2012

Štruktúra projektu
Tu je snímka obrazovky so štruktúrou projektu v Eclipse IDE

ako napísať skener v

Toto je trieda DVD, ktorá obsahuje zoznam filmových objektov

balíček co.edureka.parsers.sax import java.util.List public class DVD {private String name private List films public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {návrat filmy} public void setMovies (zoznam filmov) {this.movies = films}}

Objekt filmu má vlastnosti ako názov, režiséri, doba behu filmu, rok vydania a obsadenie filmu

balíček co.edureka.parsers.sax verejná trieda Film {private Názov reťazca private Riaditelia reťazcov private int runtime private int vydané súkromné ​​String cast public String getName () {návratové meno} public void setName (názov reťazca) {this.name = meno} public String getDirectors () {return directors} public void setDirectors (String directors) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {návrat prepustený} public void setReleased (int prepustený) {this.released = prepustený} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { návrat 'Film [meno =' + meno + ', režiséri =' + režiséri + ', runtime =' + runtime + ', vydanie =' + vydanie + ', obsadenie =' + obsadenie + ']'}}}

Implementácia obslužného programu SAX:

Chystáme sa rozšíriť org.xml.sax.helpers. Trieda DefaultHandler, ktorá poskytuje mnoho metód spätného volania a prepíše nasledujúce metódy:

startElement () - Táto metóda sa zavolá, keď dôjde k začiatku značky

endElement () - Táto metóda sa zavolá, keď sa vyskytne koniec značky

znakov () - Táto metóda sa zavolá, keď narazíte na niektoré textové údaje

Poznámka: Existuje mnoho ďalších metód spätného volania, ako je startDocument (), endDocument () atď., Ktoré je možné v prípade potreby prepísať.

balík co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler verejná trieda SAXHandler rozširuje DefaultHandler {DVD dvd = nové DVD ( ) ListmovieList = new ArrayList () Movie movie = 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) {switch (qname ) {case 'movie': movieList.add (movie) break case 'name': movie.setName (content) break case 'directors': movie.setDirectors (content) break case 'released': movie.setReleased (Integer.parseInt (content)) break break '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)} public DVD getDVD () {return dvd}}

Testovanie obslužného programu SAX
Poďme si vyskúšať náš SAXHandler. Ďalej je uvedená testovacia trieda SAXTest, kde najskôr získame inštanciu SAXParser z SAXParserFactory a zavoláme metódu parse, ktorá trvá dva argumenty: Súbor a inštancia handlera.

balík 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 verejná trieda SAXTest {public static void main (String [] args) hodí ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactory.ne = = parserFactor.newSAXParser () obslužný program SAXHandler = nový SAXHandler () Cesta k ceste = Paths.get ('src / resources', 'films.xml') parser.parse (path.toFile (), obsluha) DVD dvd = handler.getDVD ( ) Zoznam filmov = dvd.getMovies () System.out.println ('Názov DVD:' + dvd.getName ()) pre (Filmový film: filmy) {System.out.println (film)}}}

Po vykonaní triedy SAXTest získate nasledujúci výstup:

Poznámka : Ak sa pokúšate analyzovať súbor XML s rôznymi štruktúrami zo súboru movies.xml, je potrebné zmeniť kód v metódach startElement () a endElement ().

čo je vyhradené slovo v jave

Ak si chcete kód vyskúšať sami, stiahnite si ho
[buttonleads form_title = ”Stiahnutie kódu” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Stiahnutie kódu”]

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme.

Súvisiace príspevky: