Analýza souboru XML pomocí analyzátoru SAX



Java poskytuje mnoho způsobů, jak analyzovat soubor XML, jako je analýza souboru XML pomocí analyzátoru DOM, analyzátoru SAX nebo analyzátoru StAX.

Java poskytuje mnoho způsobů, jak analyzovat soubor XML. Například analýza souboru XML pomocí analyzátoru DOM, analyzátoru SAX nebo analyzátoru StAX. V tomto příspěvku uvidíme, jak analyzovat soubor XML pomocí analyzátoru SAX





Než se pustíme do podrobností o tom, jak analyzovat soubory XML pomocí analyzátoru SAX, podívejme se nejprve na to, jaký je rozdíl mezi analýzou pomocí různých analyzátorů a kdy zvolit jeden nad druhým.

Analyzátor SAX - SAX je zkratka pro Simple API for XML. Analyzátor SAX analyzuje soubor XML řádek po řádku a spouští události, když narazí na otevírací značku, uzavírací značku nebo znaková data v souboru XML. Proto se analyzátor SAX nazývá analyzátor založený na událostech



Analyzátor DOM - DOM je zkratka pro Document Object Model. Na rozdíl od analyzátoru SAX analyzátor DOM načte celý soubor XML do paměti a vytvoří stromovou strukturu, kde každý uzel ve stromu představuje součást souboru XML. Pomocí analyzátoru DOM můžete vytvářet uzly, odstraňovat uzly, měnit jejich obsah a procházet hierarchii uzlů. DOM poskytuje maximální flexibilitu při práci se soubory XML, ale v případě velkých souborů XML přináší náklady na potenciálně velkou paměťovou stopu a významné požadavky na procesor.

Analyzátor StAX - StAX je zkratka pro Streaming API pro XML. Analyzátory založené na streamování jsou velmi užitečné, když má vaše aplikace omezení paměti. Například mobilní telefon se systémem Java Micro Edition. Podobně, pokud vaše aplikace potřebuje zpracovat několik požadavků současně, například aplikační server, měl by se použít analyzátor StAX.

Analýzu založenou na proudu lze dále klasifikovat jako:

Analýza tahu - Při analýze vyžádanou aplikací klientská aplikace požaduje metody v knihovně syntaktické analýzy XML, když potřebuje interakci s infosetem XML. Jinými slovy, klient získá data XML, pouze když o to výslovně požádá.



Analýza pomocí push - Při analýze push je to analyzátor XML, který odesílá data XML klientovi, když narazí na prvky v infosetu XML. Jinými slovy, analyzátor odesílá data do aplikace bez ohledu na to, zda je aplikace připravena je použít nebo ne.

Porovnání analyzátoru SAX, DOM a StAX:

Níže uvedená tabulka shrnuje funkce analyzátoru SAX, DOM a StAX

Java_bloge_2

Nyní, když víme o různých analyzátorech, se podívejme, jak analyzovat soubor XML pomocí analyzátoru SAX

Soubor XML
Níže je soubor XML, který budeme analyzovat a konstruovat objekty Java

Bourneova identita 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 Bourne Legacy Tony Gilroy 135 Jeremy Renner , Rachel Weisz, Edward Norton 2012

Struktura projektu
Zde je snímek obrazovky struktury projektu v Eclipse IDE

mysql_fetch_array

Tady je třída DVD, která obsahuje seznam filmových objektů

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 filmů} public void setMovies (seznam filmů) {this.movies = films}}

Objekt filmu má vlastnosti jako název, režiséry, dobu běhu filmu, rok vydání a obsazení filmu

balíček co.edureka.parsers.sax veřejná třída Film {soukromý název řetězce soukromý správce řetězců soukromý int běh soukromý int uvolněn soukromý řetězec obsazení veřejný řetězec getName () {návratové jméno} public void setName (název řetězce) {this.name = name} 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 uvolněn} public void setReleased (int uvolněno) {this.released = vydáno} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { vrátit 'Film [name =' + name + ', directors =' + directors + ', runtime =' + runtime + ', vydáno =' + vydáno + ', obsazení =' + obsazení + ']'}}}

Implementace obslužné rutiny SAX:

Budeme rozšiřovat org.xml.sax.helpers. Třída DefaultHandler, která poskytuje mnoho metod zpětného volání a přepíše následující metody:

startElement () - Tato metoda se zavolá, když dojde ke spuštění značky

endElement () - Tato metoda se zavolá, když dojde ke konci značky

znaky() - Tato metoda se zavolá, když dojde k nějakým textovým datům

Poznámka: Existuje mnoho dalších metod zpětného volání, jako je startDocument (), endDocument () atd., Které lze v případě potřeby přepsat.

balíček co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler veřejná třída SAXHandler rozšiřuje 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 ) {případ 'film': filmList.add (film) případ přerušení 'název': film.setName (obsah) případ přerušení 'režiséři': film.setDirectors (obsah) případ přerušení 'vydáno': film.setReleased (Integer.parseInt (content)) případ přerušení 'runtime': movie.setRuntime (Integer.parseInt (content)) případ přerušení 'cast': movie.setCast (obsah) případ přerušení '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}}

Testování obslužné rutiny SAX
Nyní otestujeme náš SAXHandler. Níže je testovací třída SAXTest, kde nejprve získáme instanci SAXParser z SAXParserFactory a zavoláme metodu parse, která bere dva argumenty: Soubor a instanci obslužné rutiny.

balíček 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 veřejná třída SAXTest {public static void main (String [] args) hodí ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactory.ne = SaXParserFactory.ne = parserFactor.newSAXParser () SAXHandler handler = nový SAXHandler () Path path = Paths.get ('src / resources', 'films.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Seznam filmů = dvd.getMovies () System.out.println ('DVD Name:' + dvd.getName ()) pro (Filmový film: filmy) {System.out.println (film)}}}

Při provádění třídy SAXTest získáte následující výstup:

Poznámka : Pokud se pokoušíte analyzovat soubor XML s různými strukturami z filmů.xml, je třeba změnit kód v metodách startElement () a endElement ().

jak používat sady v Javě

Pokud si chcete kód vyzkoušet sami, stáhněte si jej
[buttonleads form_title = ”Stáhnout kód” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Stáhnout kód”]

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.

Související příspěvky: