Day 15: Oracle XDK


Learning In HomeOriginal Date: 27 Januari 2009

Masih dalam suasana yang meriah ini, aku akan menyemarakkannya dengan mempelajari Oracle XML Developer Kit (XDK). XDK adalah kumpulan tools untuk mempermudah membangun aplikasi berbasis XML. Pada instalasi database Oracle, ia dapat ditemukan di folder %ORACLE_HOME%\XDK. XDK memiliki komponen yang dapat dipakai oleh aplikasi Java, C, dan C++, yang terdiri atas XML Parser, XSLT Processor, XSLT VM, XML Schema Processor, XML Class Generator, XML JAXB Class Generator, XML Java Beans, XML SQL Utility, XSQL Servlet, XML Pipeline processor. Pertama kali melihat nama-nama ini membuatku sedikit kewalahan, tapi karena nama-nama komponen tersebut terlihat cukup keren, aku tidak patah semangat.

Aku akan mulai dengan mencoba memakai XML Parser di Java. XDK menyediakan dua jenis XML Parser, yaitu DOM Parser dan SAX Parser. DOM Parser akan menghasilkan representasi dokumen XML dalam bentuk tree, sementara SAX Parser men-parse berurutan dan diprogram berdasarkan event. Secara garis besar, DOM Parser membutuhkan memori lebih besar dan sesuai digunakan jika struktur tree dokumen XML akan dimodifikasi. Sementara SAX Parser lebih hemat memori dan lebih tepat digunakan bila tidak ada perubahan pada dokumen XML.

Untuk menggunakan XML Parser dari XDK, aku harus memasukkan file %ORACLE_HOME%\lib\xmlparserv2.jar di CLASSPATH. Aku akan mencoba menvalidasi XML dengan DOM Parser berdasarkan DTD, dan men-parse DTD terlebih dahulu sebelum men-parse dokumen XML dengan contoh berikut:


DOMParser parser = new DOMParser();
parser.setErrorStream(System.out);
parser.showWarnings(true);
parser.setValidationMode(
  DOMParser.DTD_VALIDATION);

FileInputStream fileDTD = new 
  FileInputStream("C:\\test.dtd");
BufferedInputStream inputDTD = new 
  BufferedInputStream(fileDTD);
parser.parseDTD(inputDTD, 
  "root-element");
parser.setDoctype(parser.getDoctype());

Setelah itu, aku akan men-parse dokumen XML dan menampilkan seluruh element-nya:


FileInputStream fis = new 
  FileInputStream("C:\\test.xml");
BufferedInputStream input = new 
  BufferedInputStream(fis);			
parser.parse(input);
			
XMLDocument doc = 
  parser.getDocument();
NodeList nl = doc.
  getElementsByTagName("*");
for (int i=0; i<nl.getLength(); 
     i++) {
  Node n = nl.item(i);
  System.out.println(n.
    getNodeName());
}

Untuk menampilkan atribut untuk seluruh element bernama “property”, aku menggunakan kode yang seperti berikut ini:


XMLDocument doc = parser.
  getDocument();
NodeList nl = doc.
  getElementsByTagName(
   "property");
for (int i=0; i<nl.getLength(); 
  i++) {
 Node n = nl.item(i);
 NamedNodeMap nnm = 
   n.getAttributes();
 StringBuilder sb = new 
   StringBuilder("PROPERTY ");
 if (nnm != null) {
   for (int j=0; 
        j<nnm.getLength();
        j++) {
    Node n2 = nnm.item(j);
    sb.append(n2.getNodeName() + 
      "=" + 
      n2.getNodeValue() + ";");
   }
 }
 System.out.println(
   sb.toString());
}

Berikutnya aku akan latihan men-parse dokumen XML yang sama, tapi kali ini aku akan menggunakan SAX Parser. Aku membuat kode program seperti berikut ini:


import java.io.*;
import oracle.xml.parser.v2.SAXParser;
import org.xml.sax.*;

public class TestSAXParser implements 
  ContentHandler {

 public TestSAXParser()  {
   try {
		
    SAXParser parser = new SAXParser();
    parser.setContentHandler(this);
    parser.setValidationMode(
      SAXParser.NONVALIDATING);
    parser.setAttribute(
      SAXParser.STANDALONE, 
      Boolean.TRUE);
						
    FileInputStream fis = new 
      FileInputStream("C:\\test.xml");
    BufferedInputStream input = new 
      BufferedInputStream(fis);			
    parser.parse(input);
			
   } catch (Exception ex) {
       ex.printStackTrace();
   }
 }
	
 public static void main(String[] args) {
   new TestSAXParser();
 }


 public void characters(char[] ch, 
   int start, int length)
   throws SAXException {}


 public void endDocument() throws 
   SAXException {
   System.out.println("Selesai parsing!");
 }


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


 public void endPrefixMapping(
   String prefix) throws SAXException {}

 
 public void ignorableWhitespace(char[] ch, 
   int start, int length)
   throws SAXException {}


 public void processingInstruction(
   String target, String data)
   throws SAXException {}


 public void setDocumentLocator(
   Locator locator) {}


 public void skippedEntity(String name) 
   throws SAXException {}


 public void startDocument() throws 
   SAXException {
  System.out.println("Mulai Parsing...");
 }


 public void startElement(String uri, 
   String localName, String name,
   Attributes atts) throws SAXException {
  StringBuilder sb = new 
     StringBuilder(name + " = ");
  for (int i=0; i<atts.getLength(); i++) {
    sb.append(atts.getLocalName(i) + 
    "=" + atts.getValue(i) + "; ");
  }
  System.out.println(sb.toString());
	
 }


 public void startPrefixMapping(
   String prefix, String uri)
   throws SAXException {}

}


Sebagai latihan terakhir dalam hari ini, aku akan membuat dan memodifikasi struktur XML (melalui DOM Parser) di dalam program, kemudian menuliskannya ke dalam sebuah file:

		
String strXML = 
  "<karyawan><nama>snake</nama>" +
  "<nama>solid</nama></karyawan>"; 
						
DOMParser parser = new DOMParser();
	
try {
  parser.parse(
    new StringReader(strXML));
			
  XMLDocument doc = 
    parser.getDocument();
			
  Element e = doc.
    createElement("nama");
  e.setTextContent(
    "karyawan baru");
  doc.getDocumentElement().
    appendChild(e);
			
  FileOutputStream fos = new 
    FileOutputStream(
      "c:\\test.xml");
  doc.print(fos);
			
} catch (Exception e) {
  e.printStackTrace();
} 

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: