Mengurai File XML Menggunakan SAX Parser



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

Java menyediakan banyak cara untuk mengurai file XML. Misalnya, mengurai file XML menggunakan parser DOM, parser SAX, atau parser StAX. Dalam posting ini kita akan melihat bagaimana mengurai file XML menggunakan parser SAX





Sebelum membahas detail tentang cara mengurai file XML menggunakan pengurai SAX, pertama-tama mari kita lihat apa perbedaan antara penguraian melalui pengurai yang berbeda dan kapan harus memilih salah satu dari yang lain.

SAX Parser - SAX adalah singkatan dari Simple API for XML. SAX Parser mem-parsing file XML baris demi baris dan memicu peristiwa saat menemukan tag pembuka, tag penutup, atau data karakter dalam file XML. Inilah sebabnya parser SAX disebut parser berbasis peristiwa



Parser DOM - DOM adalah singkatan dari Document Object Model. Tidak seperti SAX parser, parser DOM memuat file XML lengkap ke dalam memori dan membuat struktur pohon di mana setiap node di pohon mewakili komponen file XML. Dengan parser DOM Anda dapat membuat node, menghapus node, mengubah isinya, dan melintasi hierarki node. DOM memberikan fleksibilitas maksimum saat bekerja dengan file XML tetapi datang dengan biaya jejak memori yang berpotensi besar dan persyaratan prosesor yang signifikan dalam kasus file XML yang besar

StAX Parser - StAX adalah singkatan dari Streaming API for XML. Pengurai berbasis aliran sangat berguna ketika aplikasi Anda memiliki keterbatasan memori. Misalnya, ponsel yang menjalankan Java Micro Edition. Demikian pula, jika aplikasi Anda perlu memproses beberapa permintaan secara bersamaan, misalnya server aplikasi, parser StAX harus digunakan.

Penguraian berbasis aliran selanjutnya dapat diklasifikasikan sebagai:

Tarik Parsing - Dalam parsing tarik, aplikasi klien memanggil metode pada pustaka parsing XML saat perlu berinteraksi dengan infoset XML. Dengan kata lain, klien hanya mendapatkan data XML ketika secara eksplisit memintanya.



Dorong Parsing - Dalam penguraian push, itu adalah pengurai XML yang mendorong data XML ke klien, ketika menemukan elemen dalam infoset XML. Dengan kata lain, parser mengirimkan data ke aplikasi terlepas dari apakah aplikasi tersebut siap digunakan atau tidak.

Perbandingan antara parser SAX, DOM dan StAX:

Tabel di bawah ini merangkum fitur parser SAX, DOM dan StAX

Java_bloge_2

Sekarang setelah kita mengetahui tentang berbagai parser, mari kita lihat cara mengurai file XML menggunakan parser SAX

sort () di c ++

File XML
Di bawah ini adalah file XML yang akan kita parse dan membuat 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 Proyek
Berikut adalah screen shot dari struktur proyek di Eclipse IDE

Berikut adalah kelas DVD yang menyimpan daftar objek film

package co.edureka.parsers.sax impor java.util.List public class DVD {private String name private List movies public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {return film} public void setMovies (Daftar film) {this.movies = movies}}

Objek film memiliki properti seperti nama, sutradara, runtime (durasi) film, tahun rilis dan pemeran film

paket co.edureka.parsers.sax public class Film {private String name private String directors private int runtime private int dirilis pribadi 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} 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 'Film [name =' + name + ', sutradara =' + sutradara + ', runtime =' + runtime + ', dirilis =' + dilepas + ', cast =' + cast + ']'}}

Menerapkan SAX Handler:

Kami akan memperluas org.xml.sax.helpers. Kelas DefaultHandler yang menyediakan banyak metode panggilan balik dan akan mengganti metode berikut:

ke metode string di java

startElement () - Metode ini dipanggil saat awal tag ditemukan

endElement () - Metode ini dipanggil saat akhir tag ditemukan

karakter () - Metode ini dipanggil ketika beberapa data teks ditemukan

Catatan: Ada banyak metode callback lain seperti startDocument (), endDocument (), dll. Yang bisa diganti jika diperlukan.

paket co.edureka.parsers.sax impor java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler kelas publik SAXHandler memperluas DefaultHandler {DVD dvd = DVD baru ( ) ListmovieList = new ArrayList () Movie movie = null Konten string = null public void startElement (String namespaceURI, String localName, String qname, Atribut atribut) {if (qname.equals ('dvd')) {String dvdName = atribut.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 'release': movie.setReleased (Integer.parseInt (konten)) kasus putus 'runtime': movie.setRuntime (Integer.parseInt (konten)) kasus putus 'cast': movie.setCast (konten) kasus putus 'dvd': dvd.setMovies (movieList) break}} public void chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} DVD publik getDVD () {return dvd}}

Menguji SAX Handler
Sekarang mari kita uji SAXHandler kami. Di bawah ini adalah kelas pengujian SAXTest di mana kita pertama kali mendapatkan instance SAXParser dari SAXParserFactory dan memanggil metode parse yang menggunakan dua argumen: File dan instance handler.

paket 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 kelas publik SAXTest {public static void main (String [] args) melempar ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactory parserFactor = SAXParserFactory parserFactor = SAXParserFactory parserFactor = SAX parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) Buat daftar film = dvd.getMovies () System.out.println ('Nama DVD:' + dvd.getName ()) untuk (Film film: film) {System.out.println (film)}}}

Saat menjalankan kelas SAXTest, Anda akan mendapatkan output di bawah ini:

Catatan : Jika Anda mencoba mengurai file XML dengan struktur yang berbeda dari movies.xml, kode dalam metode startElement () dan endElement () perlu diubah.

Jika Anda tertarik untuk mencoba kode sendiri, unduh kodenya
[buttonleads form_title = ”Kode Unduhan” redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = ”Kode Unduh”]

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar dan kami akan menghubungi Anda kembali.

Posting terkait: