Skip to main content

Parsing XML dengan java SAX Parser

Melanjutkan dari post saya tentang parsing XML dengan Java, pada entri sebelumnya teknik parsing yang digunakan dengan menggunakan DOM Parser. pada entri kali ini saya akan membahas bagaimana cara untuk mem-parsing XML dengan SAX parser.


pada entri kali ini kita tetap menggunakan XML dengan struktur yang sama dengan entri sebelumnya.



<?xml version="1.0" encoding="UTF-8"?>
<personnel>
  <employee type="permanent">
        <name>Seagull</name>
        <id>3674</id>
        <age>34</age>
   </employee>
  <employee type="contract">
        <name>Robin</name>
        <id>3675</id>
        <age>25</age>
    </employee>
  <employee type="permanent">
        <name>Crow</name>
        <id>3676</id>
        <age>28</age>
    </employee>
</personnel>

pembacaan xml dengan SAX Parser sangat berbeda dengan pembacaan XML dengan cara DOM (Document Object Modeling), karena SAX Parser melakukan pembacaan melalui sebuah Handler. Pada Handler inilah semua tag yang menurut kita berarti akan diproses...


pada baris program dibawah ini class SAXParserExample merupakan class turunan dari DefaultHandler, dimana class DefaultHandler adalah sebuah abstract class yang mengharuskan class turunannya untuk melakukan overrides terhadap method-method berikut:

  • public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
  • public void characters(char[] ch, int start, int length) throws SAXException
  • public void endElement(String uri, String localName, String qName) throws SAXException

Berikut adalah penjelasan fungsi dari ketiga method tersebut secara simple:
  1. method startElement merupakan entry point bagi parser didalam melakukan pembacaan tag. pada method ini kita dapat melakukan seleksi terhadap tag-tag apa yang akan kita proses maupun dengan melakukan pengecekan pada parameter qName
  2. method characters digunakan untuk membaca tag body, jika tag merupakan tag yang tidak mempunyai body maka method ini tidak akan memberikan parameter apapun alias kosong.
  3. method endElement merupakan method yang diakses oleh parser ketika parser menemukan penutup dari tag yang sebelumnya dibaca oleh startElement
Berikut adalah source code lengkapnya

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class SAXParserExample extends DefaultHandler{

List myEmpls;

private String tempVal;

//to maintain context
private Employee tempEmp;


public SAXParserExample(){
myEmpls = new ArrayList();
}

public void runExample() {
parseDocument();
printData();
}

private void parseDocument() {

//get a factory
SAXParserFactory spf = SAXParserFactory.newInstance();
try {

//get a new instance of parser
SAXParser sp = spf.newSAXParser();

//parse the file and also register this class for call backs
sp.parse("employees.xml", this);

}catch(SAXException se) {
se.printStackTrace();
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch (IOException ie) {
ie.printStackTrace();
}
}

/**
* Iterate through the list and print
* the contents
*/
private void printData(){

System.out.println("No of Employees '" + myEmpls.size() + "'.");

Iterator it = myEmpls.iterator();
while(it.hasNext()) {
System.out.println(it.next().toString());
}
}


//Event Handlers
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//reset
tempVal = "";
if(qName.equalsIgnoreCase("Employee")) {
//create a new instance of employee
tempEmp = new Employee();
tempEmp.setType(attributes.getValue("type"));
}
}


public void characters(char[] ch, int start, int length) throws SAXException {
tempVal = new String(ch,start,length);
}

public void endElement(String uri, String localName, String qName) throws SAXException {

if(qName.equalsIgnoreCase("Employee")) {
//add it to the list
myEmpls.add(tempEmp);

}else if (qName.equalsIgnoreCase("Name")) {
tempEmp.setName(tempVal);
}else if (qName.equalsIgnoreCase("Id")) {
tempEmp.setId(Integer.parseInt(tempVal));
}else if (qName.equalsIgnoreCase("Age")) {
tempEmp.setAge(Integer.parseInt(tempVal));
}

}

public static void main(String[] args){
SAXParserExample spe = new SAXParserExample();
spe.runExample();
}

}

membingungkan? pada awalnya, pengunaan SAX Parser pasti sangat membingunkan, namun penggunaan SAX Parser memberikan kita keleluasaan didalam melakukan penterjemahan terhadap dokumen XML yang akan kita.

Comments

Popular posts from this blog

Mengapa Karyawan Meninggalkan Perusahaan!

Mengapa karyawan meningggalkan perusahaan (atau paling tidak sering ngedumel)? Berikut ini petikan dari bukunya Haris Priyatna yang berjudul Azim Premji, "Bill Gates" dari India (terbitan Mizania 2007). Azim Premji adalah milyuner dari India yang telah menyulap Wipro, dari sebuah perusahaan minyak goreng menjadi konglomerasi perusahaan dengan salah satunya adalah Wipro Technologies yang merupakan ikon kebangkitan industri teknologi informasi di India. Dia urutan ke-21 orang terkaya di dunia versi Forbes 2007. Azim dikenal sebagai milyuner yang bergaya hidup sederhana. Berikut ini pandangan Premji tentang mengapa karyawan betah dan tidak betah dengan perusahaan. Wipro sendiri memiliki tinkat turn-over (kepindahan) karyawan yang sangat rendah, padahal gajinya tidak lebih tinggi dibandingkan perusahaan sejenis seperti Infosys dan TCS. Mengapa KARYAWAN meninggalkan perusahaan? Banyak perusahaan yang mengalami persoalan tingginya tingkat pergantian karyawan. Betapa or

XML Parsing Dengan Java Bag. I (Menggunakan DOM Parser)

Dulu sewaktu kuliah saya pernah pernah berpikir untuk membuat suatu applikasi yang dapat membaca dan menulis file configurasinya sendiri. lalu saya menggunakan text file sebagai media penyimpan konfigurasi.... seiring perkembangan dan jam terbang bertambah sayapun sempat terpikir untuk mengganti text file yang digunakan menjadi XML (Extensible Markup Language) dimana dokumen ini memiliki keunggulan yang sangat banyak. tidak hanya sebagai media penyimpanan konfigurasi, ternyata XML juga banyak digunakan sebagai media penyimpanan data. seperti contoh berikut ini. <?xml version="1.0" encoding="UTF-8"?> <personnel> <employee type="permanent"> <name>Seagull</name> <id>3674</id> <age>34</age> </employee> <employee type="contract"> <name>Robin</name> <id>3675</id> <age>25</age> </employee&

JSP/Servlet File Upload....

Wah dah lama juga ga posting... jadi gue sempet mikir kira-kira enaknya posting apa ya? nah kebetulan beberapa waktu yang lampau gue pernah dapet assignment dari kantor untuk buat aplikasi yang mengupload file zip lewat JSP/Servlet trus waktu selesai di upload file tadi langsung otomatis diextract... nah... pada posting kali ini gue pengen ngebahas gimana caranya buat Script upload file di JSP/Servlet... karena umumnya penanganan request yang bersifat multi-part agak berbeda pada server j2ee container dibandingkan dengan bahasa pemograman lainnya (eg. PHP). bagi yang belum ngerti atau ngga' bisa java tapi pingin belajar silahkan comment disini, nanti gue buat post tentang "java tutorial" berikut adalah beberapa API yang harus dimiliki terlebih dahulu. download API commons-fileupload disini download API commons-io disini setelah file telah didownload kita lanjutkan dengan coding... pertama kali yang harus dilakukan adalah memasukkan API library diatas kedalam class