0% menganggap dokumen ini bermanfaat (0 suara)
76 tayangan

Parsing XML Dengan Java SAX Parser

Diunggah oleh

tmahfuzh
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
76 tayangan

Parsing XML Dengan Java SAX Parser

Diunggah oleh

tmahfuzh
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 9

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:
y y y

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 import import import java.io.IOException; java.util.ArrayList; java.util.Iterator; 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(); } }

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> <employee type="permanent"> <name>Crow</name> <id>3676</id> <age>28</age> </employee> </personnel>

Dokumen XML diatas menjabarkan tentang struktur data kepegawaian. lalu apa kegunaannya pada aplikasi? dan bagaimana caranya? Oke, pada posting saya berikut ini kita akan membuat suatu aplikasi yang memiliki fungsi untuk membaca(parse) data-data tersebut kedalam applikasi. Kira-kira output dari applikasi ini adalah:
Employee Details - Name:Seagull, Type:permanent, Id:3674, Age:34. Employee Details - Name:Robin, Type:contract, Id:3675, Age:25. Employee Details - Name:Crow, Type:permanent, Id:3676, Age:28.

Ada 2 cara dalam membaca dokumen XML, 1) Menggunakan DOM(Document Object Modeling) Parser, 2) Menggunakan SAX (Simple API for XML). Pada posting kali ini kita akan mencoba menggunakan DOM Parser. Ada beberapa langkah yang harus dilakukan: 1. Buka File XML 2. Parse XML

3. Petakan hasil parse kedalam beans 4. tampilkan beans berikut cara membuka file XML kedalam bentuk Object
private void parseXmlFile(){ //get the factory DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { //Using factory get an instance of document builder DocumentBuilder db = dbf.newDocumentBuilder(); //parse using builder to get DOM representation of the XML file dom = db.parse("employees.xml");

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

Setelah object dari dokumen XML telah dibuka maka tahap selanjutnya adalah membuat function untuk memparsing object dari dokumen XML tadi. berikut adalah function untuk mem-parsing Object document XML
private void parseDocument(){ //get the root element Element docEle = dom.getDocumentElement(); //get a nodelist of elements NodeList nl = docEle.getElementsByTagName("Employee"); if(nl != null && nl.getLength() > 0) { for(int i = 0 ; i < nl.getLength();i++) { //get the employee element Element el = (Element)nl.item(i); //get the Employee object Employee e = getEmployee(el); //add it to list myEmpls.add(e); } } }

dalam proses parsing diatas kita akan menemukan elemen-elemen file XML yang kemudian elemenelemen tersebut akan kita petakan kedalam sebuah atau sekumpulan dari bean, sebut saja Employee beans. berikut adalah function untuk memetakan elemen-elemen dari dokumen XML kedalam Employee beans.
private Employee getEmployee(Element empEl) { //for each element get text or int values of //name ,id, age and name String name = getTextValue(empEl,"Name"); int id = getIntValue(empEl,"Id"); int age = getIntValue(empEl,"Age"); String type = empEl.getAttribute("type"); //Create a new Employee with the value read from the xml nodes Employee e = new Employee(name,id,age,type); return e; }

/** * I take a xml element and the tag name, look for the tag and get * the text content * i.e for John xml snippet if * the Element points to employee node and tagName is 'name' I will return John */ private String getTextValue(Element ele, String tagName) { String textVal = null; NodeList nl = ele.getElementsByTagName(tagName); if(nl != null && nl.getLength() > 0) { Element el = (Element)nl.item(0); textVal = el.getFirstChild().getNodeValue(); } return textVal; }

/** * Calls getTextValue and returns a int value */ private int getIntValue(Element ele, String tagName) { //in production application you would catch the exception return Integer.parseInt(getTextValue(ele,tagName)); }

Setelah kita mendapatkan list of Employee beans, yang proses selanjutnya adalah mencetak datadata didalam list ke output.
private void printData(){ System.out.println("No of Employees '" + myEmpls.size() + "'."); Iterator it = myEmpls.iterator(); while(it.hasNext()) { System.out.println(it.next().toString());

} }

Selesai sudah kita membaca(parse) sebuah dokumen XML dengan mengunakan DOM Parser. untuk teknik pembacaan dokumen XML menggunakan SAX akan dibahas pada posting selanjutnya.

Parsing XML menggunakan Java

Masih berkutat tentang parsing XML, tapi di artikel kali ini kita akan mencoba menggunakan bahasa pemrograman java untuk melakukan parsing terhadap file xml. tanpa berpanjang lebar lagi langsung saja kita mulai tutorial kali ini. Yang pertama harus di lakukan adalah copy paste code xml di bawah ini, lalu simpan di directory C:/ dengan nama MyXMLFile.xml MyXMLFile.xml
<?xml version="1.0"?> <company> <employee> <firstname>Tom</firstname> <lastname>Cruise</lastname> </employee> <employee> <firstname>Paul</firstname> <lastname>Enderson</lastname> </employee> <employee> <firstname>George</firstname> <lastname>Bush</lastname> </employee> </company> Lalu buat sebuah java main class untuk menaruh code di bawah ini : /*

* To change this template, choose Tools | Templates * and open the template in the editor. */

package action;

import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;

public class xml {

/** * @param args the command line arguments */ public static void main(String[] args) { try { File file = new File("c:\\MyXMLFile.xml"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(file); doc.getDocumentElement().normalize(); System.out.println("Root element " + doc.getDocumentElement().getNodeName());

NodeList nodeLst = doc.getElementsByTagName("employee"); System.out.println("Information of all employees"); for (int s = 0; s < nodeLst.getLength(); s++) { Node fstNode = nodeLst.item(s); if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

Element fstElmnt = (Element) fstNode; NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("firstname"); Element fstNmElmnt = (Element) fstNmElmntLst.item(0); NodeList fstNm = fstNmElmnt.getChildNodes(); System.out.println("First Name : " + ((Node) fstNm.item(0)).getNodeValue()); NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("lastname"); Element lstNmElmnt = (Element) lstNmElmntLst.item(0); NodeList lstNm = lstNmElmnt.getChildNodes(); System.out.println("Last Name : " + ((Node) lstNm.item(0)).getNodeValue()); } } } catch (Exception e) { e.printStackTrace(); } } } Silahkan di Run maka akan tampil hasil dari proses parsing yang di lakukan oleh code Java di atas.

Anda mungkin juga menyukai