XML fájl elemzése a SAX elemző segítségével



A Java számos módszert kínál egy XML fájl elemzésére, például egy XML fájl elemzésére DOM elemző, SAX elemző vagy StAX elemző használatával.

A Java számos módszert kínál egy XML fájl elemzésére. Például XML-fájl elemzése DOM-elemző, SAX-elemző vagy StAX-elemző segítségével. Ebben a bejegyzésben megtudhatjuk, hogyan elemezzünk egy XML fájlt SAX elemző segítségével





Mielőtt belemennénk az XML fájlok SAX elemző használatával történő elemzésének részleteibe, először nézzük meg, mi a különbség a különböző elemzőkön keresztüli elemzés, és mikor válasszunk egyet a másik helyett.

SAX elemző - A SAX az XML egyszerű API rövidítése. A SAX elemző az XML fájlt soronként elemzi és eseményeket vált ki, amikor az XML fájl nyitó címkéjével, záró címkéjével vagy karakter adataival találkozik. Ezért hívják a SAX elemzőt eseményalapú elemzőnek



DOM elemző - A DOM a Document Object Model rövidítése. A SAX elemzővel ellentétben a DOM elemző betölti a teljes XML fájlt a memóriába, és létrehoz egy fa struktúrát, ahol a fa minden csomópontja az XML fájl egy összetevőjét képviseli. A DOM-elemzővel csomópontokat hozhat létre, eltávolíthatja azokat, megváltoztathatja azok tartalmát és bejárhatja a csomópont hierarchiáját. A DOM maximális rugalmasságot biztosít az XML fájlokkal való munkavégzés során, de költséges lehet a nagy memóriaterület és jelentős processzorigény nagy XML fájlok esetén

StAX elemző - A StAX a Streaming API for XML rövidítése. Az adatfolyam-alapú elemzők nagyon hasznosak, ha alkalmazásának memóriakorlátjai vannak. Például egy Java Micro Editiont futtató mobiltelefon. Hasonlóképpen, ha az alkalmazásnak egyszerre több kérést kell feldolgoznia, például egy alkalmazásszervert, akkor StAX elemzőt kell használni.

Az adatfolyam-alapú elemzés tovább osztályozható:

Húzza az elemzést - A pull-elemzés során az ügyfélalkalmazás módszereket kér egy XML-elemző könyvtárra, amikor kölcsönhatásba kell lépnie egy XML-infókészlettel. Más szavakkal, az ügyfél csak akkor kap XML-adatokat, ha kifejezetten kéri.



Nyomja meg az elemzést - A push elemzés során az XML elemző az, aki az XML adatokat továbbítja az ügyfélnek, amikor elemekkel találkozik egy XML infókészletben. Más szavakkal, az elemző az adatokat elküldi az alkalmazásnak, függetlenül attól, hogy az alkalmazás készen áll-e a használatra vagy sem.

A SAX, DOM és a StAX elemző összehasonlítása:

Az alábbi táblázat összefoglalja a SAX, DOM és StAX elemző tulajdonságait

Java_bloge_2

Most, hogy tudunk a különböző elemzőkről, nézzük meg, hogyan kell elemezni az XML fájlt SAX elemző segítségével

XML fájl
Az alábbiakban bemutatjuk az XML fájlt, amelyet elemezni és szerkeszteni fogunk Java objektumokkal

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

Projekt felépítése
Itt található az Eclipse IDE projektszerkezetének képernyőképe

példa a java példányváltozójára

Itt található a DVD osztály, amely a filmobjektumok listáját tartalmazza

csomag co.edureka.parsers.sax import 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 () {visszatér filmek} public void setFilmek (Filmek listája) {this.movies = filmek}}

A filmobjektum olyan tulajdonságokkal rendelkezik, mint a név, a rendezők, a film futási ideje (időtartama), a kiadás éve és a film szereplői

csomag co.edureka.parsers.sax public class Film {private String name private String rendezők private int futásidejű private int release private String cast public public String getName () {return name} public void setName (String name) {this.name = name} public String getDirectors () {return rendezők} public void setDirectors (String rendezők) {this.directors = rendezők} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {visszatérés kiadva} public void setReleased (int kiadva) {this.released = megjelent} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Orride public String toString () { return 'Film [név =' + név + ', rendezők =' + rendezők + ', futásidejű =' + futásidejű + ', kiadás =' + kiadás + ', leadás =' + leadás '' '}}}

A SAX Handler bevezetése:

Bővíteni fogjuk az org.xml.sax.helpers alkalmazást. DefaultHandler osztály, amely számos visszahívási módszert kínál, és felülírja a következő módszereket:

startElement () - Ezt a módszert akkor hívják meg, amikor egy címke kezdetére kerül sor

endElement () - Ezt a módszert akkor hívják meg, amikor egy címke végére kerül

karakterek() - Ezt a módszert akkor hívják meg, ha valamilyen szöveges adat találkozik

Megjegyzés: Sok más visszahívási módszer létezik, mint például a startDocument (), endDocument () stb., Amelyek szükség esetén felülírhatók.

csomag co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler public class SAXHandler kiterjeszti a DefaultHandler {DVD dvd = new DVD ( ) ListmovieList = new ArrayList () Filmfilm = null String content = null public void startElement (String névtérURI, String localName, String qname, Attributes attribútumok) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('név') dvd.setName (dvdName)} else if (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String névtérURI, String localName, String qname) {kapcsoló (qname ) {case 'movie': movieList.add (film) break case 'name': movie.setName (content) break case 'rendezők': movie.setDirectors (tartalom) break case 'kiadva': movie.setReleased (Integer.parseInt (tartalom)) break case '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}}

Az SAX Handler tesztelése
Most teszteljük a SAXHandlerünket. Az alábbiakban bemutatjuk a SAXTest tesztosztályt, ahol először kapunk egy SAXParser példányt a SAXParserFactory-tól, és meghívjuk az elemzési metódust, amely két argumentumot tartalmaz: A File és a Handler példányt.

csomag 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álás javax.xml.parsers.SAXParserFactory import org.xml.sax.SAXException nyilvános osztály SAXTest {public static void main (String [] args) dob ParserConfigurationException, SAXException, IOException {SAXParserereractory = PARXParserFactory parserFactor.newSAXParser () SAXHandler kezelő = új SAXHandler () Elérési útvonal = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Sorolja fel a filmek = dvd.getMovies () System.out.println ('DVD neve:' + dvd.getName ()) elemet a (Film film: filmek) {System.out.println (film)}}}

A SAXTest osztály végrehajtásakor az alábbi kimenetet kapja:

Jegyzet : Ha egy XML fájlt próbál meg elemezni a movies.xml fájltól eltérő struktúrával, akkor a startElement () és az endElement () metódusokban található kódot meg kell változtatni.

jenkins vs báb vs szakács

Ha érdekli a kód kipróbálása, töltse le a kódot
[buttonleads form_title = 'Kód letöltése' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'Kód letöltése']

Van egy kérdésünk? Kérjük, említse meg a megjegyzések részben, és kapcsolatba lépünk Önnel.

Kapcsolódó hozzászólások: