Parsing (Membaca) XML di Java

java xml
Well postingan kali ini saya akan membahas lagi tentang java, di sini kita akan mencoba untuk parsing XML mengunakan Java. Ada beberapa cara untuk parsing XML, diantaranya adalah parsing menggunakan DOM dan parsing menggunakan SAX Parser. Dari 2 metode ini masing-masing memiliki kelemahan dan kelebihan, secara umum DOM memiliki kelebihan untuk mengetahui length dari value yang dibaca, sedangkan SAX parser tidak, kita harus manual menghitung length / jumlah dari value yang dibaca. Sedangkan kelebihan SAX parser yaitu lebih simple, hanya menggunakan boolean untuk value yang dibaca, sehingga penggunaan memory dari sax parser lebih kecil ketimbang DOM parser.

Untuk mengetahui lebih lanjut, perhatikan implementasi dari masing-masing metode berikut:
XML:



  
      Java
      http://www.rgagnon/javahowto.htm
  
    
      PowerBuilder
      http://www.rgagnon/pbhowto.htm
  
      
        Javascript
        http://www.rgagnon/jshowto.htm
  
      
        VBScript
        http://www.rgagnon/vbshowto.htm
  

Output:

 
Title: Java
Url: http://www.rgagnon/javahowto.htm
Title: PowerBuilder
Url: http://www.rgagnon/pbhowto.htm
Title: Javascript
Url: http://www.rgagnon/jshowto.htm
Title: VBScript
Url: http://www.rgagnon/vbshowto.htm

Menggunakan DOM:

 
// jdk1.4.1
import java.io.File;
import javax.xml.parsers.*;
import org.w3c.dom.*;

// using DOM
public class HowtoListerDOM {
 public static void main(String[] args) {
   File file = new File("howto.xml");
   try {
     DocumentBuilder builder =
       DocumentBuilderFactory.newInstance().newDocumentBuilder();
     Document doc = builder.parse(file);

     NodeList nodes = doc.getElementsByTagName("topic");
     for (int i = 0; i < nodes.getLength(); i++) {
       Element element = (Element) nodes.item(i);

       NodeList title = element.getElementsByTagName("title");
       Element line = (Element) title.item(0);

       System.out.println("Title: " + getCharacterDataFromElement(line));

       NodeList url = element.getElementsByTagName("url");
       line = (Element) url.item(0);
       System.out.println("Url: " + getCharacterDataFromElement(line));

     }
   }
   catch (Exception e) {
      e.printStackTrace();
   }
 }
 public static String getCharacterDataFromElement(Element e) {
   Node child = e.getFirstChild();
   if (child instanceof CharacterData) {
     CharacterData cd = (CharacterData) child;
       return cd.getData();
     }
   return "?";
 }
}

Menggunakan SAX:

 
// jdk1.4.1
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

// using SAX
public class HowToListerSAX {
  class HowToHandler extends DefaultHandler {
    boolean title = false;
    boolean url   = false;
    public void startElement(String nsURI, String strippedName,
                            String tagName, Attributes attributes)
       throws SAXException {
     if (tagName.equalsIgnoreCase("title"))
        title = true;
     if (tagName.equalsIgnoreCase("url"))
        url = true;
    }

    public void characters(char[] ch, int start, int length) {
     if (title) {
       System.out.println("Title: " + new String(ch, start, length));
       title = false;
       }
     else if (url) {
       System.out.println("Url: " + new String(ch, start,length));
       url = false;
       }
     }
    }

    public void list( ) throws Exception {
       XMLReader parser =
          XMLReaderFactory.createXMLReader
            ("org.apache.crimson.parser.XMLReaderImpl");
       parser.setContentHandler(new HowToHandler( ));
       parser.parse("howto.xml");
       }

    public static void main(String[] args) throws Exception {
       new HowToListerSAX().list( );
       }
}

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *