Ανάλυση αρχείου XML με χρήση του προγράμματος ανάλυσης SAX



Η Java παρέχει πολλούς τρόπους ανάλυσης ενός αρχείου XML όπως η ανάλυση ενός αρχείου XML χρησιμοποιώντας DOM parser, SAX parser ή StAX parser.

Η Java παρέχει πολλούς τρόπους ανάλυσης ενός αρχείου XML. Για παράδειγμα, ανάλυση ενός αρχείου XML χρησιμοποιώντας DOM parser, SAX parser ή StAX parser. Σε αυτήν την ανάρτηση θα δούμε πώς να αναλύσουμε ένα αρχείο XML χρησιμοποιώντας το πρόγραμμα ανάλυσης SAX





Πριν μπείτε στις λεπτομέρειες σχετικά με τον τρόπο ανάλυσης αρχείων XML χρησιμοποιώντας το πρόγραμμα ανάλυσης SAX, ας δούμε πρώτα ποια είναι η διαφορά μεταξύ της ανάλυσης μεταξύ διαφορετικών προγραμμάτων ανάλυσης και πότε να επιλέξουμε το ένα από το άλλο.

Αναλυτής SAX - Το SAX είναι αρκτικόλεξο για το Simple API για XML. Το SAX Parser αναλύει το αρχείο XML κατά γραμμή και ενεργοποιεί συμβάντα όταν συναντά την ετικέτα ανοίγματος, την ετικέτα κλεισίματος ή τα δεδομένα χαρακτήρων σε αρχείο XML. Γι 'αυτό το πρόγραμμα ανάλυσης SAX ονομάζεται πρόγραμμα ανάλυσης βάσει συμβάντων



Αναλυτής DOM - Το DOM είναι αρκτικόλεξο για το Document Object Model. Σε αντίθεση με το SAX parser, το DOM parser φορτώνει το πλήρες αρχείο XML στη μνήμη και δημιουργεί μια δομή δέντρου όπου κάθε κόμβος στο δέντρο αντιπροσωπεύει ένα στοιχείο του αρχείου XML. Με το πρόγραμμα ανάλυσης DOM μπορείτε να δημιουργήσετε κόμβους, να αφαιρέσετε κόμβους, να αλλάξετε το περιεχόμενό τους και να διασχίσετε την ιεραρχία κόμβων. Το DOM παρέχει μέγιστη ευελιξία ενώ εργάζεστε με αρχεία XML, αλλά συνοδεύεται από κόστος δυνητικά μεγάλου αποτυπώματος μνήμης και σημαντικές απαιτήσεις επεξεργαστή σε περίπτωση μεγάλων αρχείων XML

Αναλυτής StAX - Το StAX είναι αρκτικόλεξο για το Streaming API για XML. Το πρόγραμμα ανάλυσης βάσει ροής είναι πολύ χρήσιμο όταν η εφαρμογή σας έχει περιορισμούς μνήμης. Για παράδειγμα, ένα κινητό τηλέφωνο που εκτελεί Java Micro Edition. Ομοίως, εάν η εφαρμογή σας πρέπει να επεξεργαστεί ταυτόχρονα πολλά αιτήματα, για παράδειγμα έναν διακομιστή εφαρμογών, θα πρέπει να χρησιμοποιηθεί το πρόγραμμα ανάλυσης StAX.

Η ανάλυση βάσει ροής μπορεί περαιτέρω να ταξινομηθεί ως:

Τραβήξτε την ανάλυση - Σε ανάλυση ανάλυσης, η εφαρμογή πελάτη ζητά μεθόδους σε μια βιβλιοθήκη ανάλυσης XML όταν χρειάζεται να αλληλεπιδράσει με μια κεφαλή XML. Με άλλα λόγια, ο πελάτης λαμβάνει δεδομένα XML μόνο όταν το ζητά ρητά.



Push Parsing - Στο Parsing parsing, είναι ο XML parser που ωθεί τα δεδομένα XML στον πελάτη, όταν συναντά στοιχεία σε μια infoset XML. Με άλλα λόγια, το πρόγραμμα ανάλυσης στέλνει τα δεδομένα στην εφαρμογή ανεξάρτητα από την εφαρμογή που είναι έτοιμη να τα χρησιμοποιήσει ή όχι.

Σύγκριση μεταξύ του προγράμματος ανάλυσης SAX, DOM και StAX:

Ο παρακάτω πίνακας συνοψίζει τις δυνατότητες του προγράμματος ανάλυσης SAX, DOM και StAX

Java_bloge_2

Τώρα που γνωρίζουμε για τους διάφορους αναλυτές, ας δούμε πώς να αναλύσουμε το αρχείο XML χρησιμοποιώντας το πρόγραμμα ανάλυσης SAX

Αρχείο XML
Παρακάτω είναι το αρχείο XML που πρόκειται να αναλύσουμε και να κατασκευάσουμε αντικείμενα Java

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

Δομή έργου
Εδώ είναι το στιγμιότυπο οθόνης της δομής του έργου στο Eclipse IDE

java διπλή σε int μετατροπή

Εδώ είναι η κατηγορία DVD που περιέχει μια λίστα με αντικείμενα ταινιών

package co.edureka.parsers.sax import java.util.List δημόσια τάξη DVD {ιδιωτικό όνομα συμβολοσειράς ιδιωτικό Λίστα ταινιών δημόσια String getName () {return name} public void setName (String name) {this.name = name} δημόσια Λίστα getMovies () {return film} public void setMovies (Λίστα ταινιών) {this.movies = movies}}

Το αντικείμενο της ταινίας έχει ιδιότητες όπως όνομα, σκηνοθέτες, χρόνο εκτέλεσης της ταινίας, έτος κυκλοφορίας και cast της ταινίας

πακέτο co.edureka.parsers.sax δημόσια τάξη Ταινία {private String name private String directors 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 directors} public void setDirectors (String directors) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} δημόσια int getReleased ( ) {return release} public void setReleased (int release) {this.released = release} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { επιστροφή 'Ταινία [όνομα = '+ όνομα +', σκηνοθέτες = '+ σκηνοθέτες +', χρόνος εκτέλεσης = '+ χρόνος εκτέλεσης +', κυκλοφορία = '+ κυκλοφορία +', cast = '+ cast +'] '}}

Εφαρμογή του χειριστή SAX:

Πρόκειται να επεκτείνουμε τα org.xml.sax.helpers. DefaultHandler class που παρέχει πολλές μεθόδους επανάκλησης και θα παρακάμψει τις ακόλουθες μεθόδους:

startElement () - Αυτή η μέθοδος καλείται κατά την έναρξη μιας ετικέτας

endElement () - Αυτή η μέθοδος καλείται όταν συναντηθεί το τέλος μιας ετικέτας

χαρακτήρες () - Αυτή η μέθοδος καλείται όταν συναντώνται ορισμένα δεδομένα κειμένου

Σημείωση: Υπάρχουν πολλές άλλες μέθοδοι επανάκλησης όπως startDocument (), endDocument () κ.λπ. που μπορούν να παρακαμφθούν εάν απαιτείται.

πακέτο co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler δημόσια τάξη SAXHandler επεκτείνει το DefaultHandler {DVD dvd = νέο DVD ( ) ListmovieList = new ArrayList () Movie movie = null String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes atribut) {if (qname.equals ('dvd')) {String dvdName = Features.getValue ('name') dvd.setName (dvdName)} αλλιώς εάν (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 'director': movie.setDirectors (content) break case 'κυκλοφόρησε': movie.setReleased (Integer.parseInt [content]] break case 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} δημόσιο κενό χαρά cters (char [] ch, int start, int length) {content = new String (ch, start, length)} δημόσιο DVD getDVD () {return dvd}}

Δοκιμή του χειριστή SAX
Ας δοκιμάσουμε το SAXHandler μας. Παρακάτω είναι η δοκιμαστική τάξη SAXTest όπου λαμβάνουμε για πρώτη φορά μια παρουσία του SAXParser από το SAXParserFactory και καλούμε τη μέθοδο ανάλυσης που παίρνει δύο ορίσματα: Ένα αρχείο και μια παρουσία χειριστή.

πακέτο 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 javax.xml.parsers.SAXParserFactory import org.xml.sax.SAXException δημόσια τάξη SAXTest {public static void main (String [] args) ρίχνει το ParserConfigurationException, SAXException, IOException {SAXParserFactoryParserFacterPacter parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD () ) Λίστα ταινιών = dvd.getMovies () System.out.println ('Όνομα DVD:' + dvd.getName ()) για (Ταινία ταινίας: ταινίες) {System.out.println (ταινία)}}}

Κατά την εκτέλεση της τάξης SAXTest θα έχετε την ακόλουθη έξοδο:

Σημείωση : Εάν προσπαθείτε να αναλύσετε ένα αρχείο XML με διαφορετικές δομές από το movie.xml, τότε πρέπει να αλλάξετε τον κώδικα στις μεθόδους startElement () και endElement ().

Εάν ενδιαφέρεστε να δοκιμάσετε τον κωδικό, κατεβάστε τον κωδικό
[buttonleads form_title = 'Λήψη κώδικα' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'Λήψη κώδικα']

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων και θα επικοινωνήσουμε μαζί σας.

Σχετικές αναρτήσεις: