Menghuraikan Fail XML Menggunakan SAX Parser



Java menyediakan banyak cara untuk mengurai fail XML seperti menguraikan fail XML menggunakan DOM parser, SAX parser atau StAX parser.

Java menyediakan banyak cara untuk menguraikan fail XML. Contohnya, menghuraikan fail XML menggunakan DOM parser, SAX parser atau StAX parser. Dalam catatan ini kita akan melihat cara menguraikan fail XML menggunakan SAX parser





Sebelum mengetahui lebih terperinci mengenai cara menguraikan fail XML menggunakan SAX parser, mari kita lihat terlebih dahulu apa perbezaan antara menghurai melalui pengurai yang berbeza dan kapan harus memilih yang lain daripada yang lain.

Penghurai SAX - SAX adalah akronim untuk Simple API untuk XML. SAX Parser menguraikan baris fail XML demi baris dan mencetuskan peristiwa ketika menemui tag pembuka, tag penutup atau data watak dalam fail XML. Inilah sebabnya mengapa parser SAX disebut parser berdasarkan acara



Penghurai DOM - DOM adalah singkatan Model Dokumen Objek. Tidak seperti penghurai SAX DOM parser memuat fail XML yang lengkap ke dalam memori dan membuat struktur pokok di mana setiap simpul di dalam pohon mewakili komponen fail XML. Dengan penghurai DOM, anda boleh membuat nod, membuang node, menukar kandungannya dan melintasi hierarki nod. DOM memberikan fleksibiliti maksimum semasa bekerja dengan fail XML tetapi ia dilengkapi dengan kos jejak memori yang berpotensi besar dan keperluan pemproses yang besar sekiranya fail XML besar

Penyusun StAX - StAX adalah akronim untuk Streaming API untuk XML. Penghurai berdasarkan aliran sangat berguna apabila aplikasi anda mempunyai batasan memori. Contohnya, telefon bimbit yang menjalankan Java Micro Edition. Begitu juga, jika aplikasi anda perlu memproses beberapa permintaan secara serentak, misalnya pelayan aplikasi, penghurai StAX harus digunakan.

Penghuraian berdasarkan aliran selanjutnya dapat diklasifikasikan sebagai:

Tarik Menghurai - Dalam parsing pull, aplikasi klien meminta kaedah pada pustaka parsing XML ketika perlu berinteraksi dengan infoset XML. Dengan kata lain, pelanggan hanya mendapat data XML apabila secara eksplisit memintanya.



Push Parsing - Dalam parsing push, pengurai XML yang mendorong data XML ke klien, ketika menemui elemen dalam infoset XML. Dengan kata lain, parser mengirimkan data ke aplikasi tanpa mengira aplikasi itu siap menggunakannya atau tidak.

Perbandingan antara penghurai SAX, DOM dan StAX:

Jadual di bawah meringkaskan ciri penghurai SAX, DOM dan StAX

Java_bloge_2

Sekarang setelah kita mengetahui tentang penghurai yang berbeza, mari kita lihat cara menguraikan fail XML menggunakan penghurai SAX

Fail XML
Di bawah ini adalah fail XML yang akan kita menguraikan dan membina objek 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

Struktur Projek
Berikut adalah tangkapan skrin struktur projek di Eclipse IDE

cara membalikkan rentetan pada ular sawa

Berikut adalah kelas DVD yang memuat senarai objek filem

pakej co.edureka.parsers.sax import java.util.Daftar DVD kelas awam {private String name private List movie public String getName () {return name} public void setName (String name) {this.name = name} senarai awam getMovies () {filem kembali} set kosong filem awam (Senaraikan filem) {this.movies = movies}}

Objek filem mempunyai sifat seperti nama, pengarah, jangka masa (tempoh) filem, tahun dilancarkan dan pemeran filem

pakej co.edureka.parsers.sax public class Movie {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 director} public void setDirectors (pengarah String) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public 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 () { kembalikan 'Filem [nama =' + nama + ', pengarah =' + pengarah + ', runtime =' + runtime + ', release =' + release + ', cast =' + cast + ']'}}

Melaksanakan pengendali SAX:

Kami akan memperluaskan pembantu org.xml.sax.helpers. Kelas DefaultHandler yang menyediakan banyak kaedah panggilan balik dan akan mengatasi kaedah berikut:

startElement () - Kaedah ini dipanggil ketika permulaan tag ditemui

elemen akhir () - Kaedah ini dipanggil ketika akhir tag ditemui

watak() - Kaedah ini dipanggil ketika beberapa data teks ditemui

Catatan: Terdapat banyak kaedah panggilan balik lain seperti startDocument (), endDocument () dll yang boleh diganti jika diperlukan.

pakej co.edureka.parsers.sax import java.util.ArrayList import java.util. Daftar import org.xml.sax.Attribut import org.xml.sax.helpers.DefaultHandler kelas awam SAXHandler memperluas DefaultHandler {DVD dvd = DVD baru ( ListmovieList = ArrayList baru () Filem filem = kandungan String null = elemen kosong kosong awamElement (String namespaceURI, String localName, String qname, atribut atribut) {if (qname.equals ('dvd')) {String dvdName = attribut.getValue ('name') dvd.setName (dvdName)} lain jika (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 'dilepaskan': movie.setReleased (Integer.parseInt (content)) case break 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} kekosongan awam chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} awam DVD getDVD () {return dvd}}

Menguji SAX Handler
Sekarang mari kita uji SAXHandler kami. Di bawah ini adalah kelas ujian SAXTest di mana kami mula-mula mendapat contoh SAXParser dari SAXParserFactory dan memanggil kaedah parse yang mengambil dua argumen: A File dan contoh pengendali.

pakej 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 public class SAXTest {public static void main (String [] args) melemparkan ParserConfigurationException, SAXException, IOException {SAXParserFactoryParserPacterFactorParfesParfarSarParfarSarfarParfarParfarParfarParfarNarParfarParfarParfX_AX = ParserFactory parserFactor.newSAXParser () SAXHandler handler = SAXHandler baru () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Senaraikan filem = dvd.getMovies () System.out.println ('DVD Name:' + dvd.getName ()) untuk (Filem filem: filem) {System.out.println (filem)}}}

Semasa melaksanakan kelas SAXTest, anda akan mendapat output di bawah:

gabungan algoritma c ++

Catatan : Sekiranya anda cuba menguraikan fail XML dengan struktur yang berbeza dari filem.xml, maka kod dalam kaedah startElement () dan endElement () perlu diubah.

Sekiranya anda berminat untuk mencuba kod itu sendiri muat turun kod tersebut
[buttonleads form_title = 'Download Code' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'Muat turun Kod']

Ada soalan untuk kami? Sila sebutkan di bahagian komen dan kami akan menghubungi anda.

Catatan berkaitan: