Cara Memparsing XML Menggunakan Java


Untuk yang belum mengetahui apa itu xml, sebaiknya baca terlebih dahulu di sini.

Untuk membaca string/file xml di android, caranya sama seperti menggunakan Java yaitu menggunakan library yang ada di Java JDK. Misalkan kita mempunya file employee.xml seperti berikut :

employee.xml

Tag <world>, <company>, <employee>, <firstname>, dan <lastname> disebut element. Setiap element harus memiliki penutup seperti </nama_tag>. Di dalam xml, harus ada persis 1 root element, dari contoh di atas root element adalah <world>.

Pada gambar di atas, itu adalah isi dari file employee.xml. Saya akan menunjukkan bagaimana cara membaca informasi dari xml tersebut menggunakan Java.

Method parser di atas menerima parameter string berupa nama file input xml.

 NodeList companyList = doc.getElementsByTagName("company");
 

Pemanggilan doc.getElementsByTagName(“company”) akan mengembalikan semua object yang merupakan element <company>. Jadi companyList akan memegang reference mengenai informasi semua element dengan tag <company>.

 Element company = (Element) companyList.item(i);
 

Kode di atas akan mengembalikan node/element company ke-i.

Kemudian, dari company tersebut, kita akan mendapatkan semua list employee yang ada di company itu. Hal ini ditunjukkkan dengan :

 NodeList employeeList = company.getElementByTagName("employee");
 

Dari employeeList itu, kita akan mengakses element firstname dan lastname dari masing-masing employee.

 NodeList firstNameList = employee.getElementsByTagName("firstname");
 Node firstName = ((Element)firstNameList.item(0)).getChildNodes().item(0);
 System.out.println("First name : "+firstName.getNodeValue());

NodeList lastNameList = employee.getElementsByTagName("lastname");
 Node lastName = ((Element)lastNameList.item(0)).getChildNodes().item(0);
 System.out.println("Last name : "+lastName.getNodeValue());
 

Di sini, firstNameList(0) dan lastNameList(0) adalah element firstname dan lastname, karena masing-masing employee hanya ada 1 element fisrtname dan lastname. Namun setelah mendapatkan element dari fisrtname dan lastname, kita belum bisa mengakses text di dalam element tersebut. Text di dalam tag <firstname>Text</firstname> bukanlah element, sehingga hanya bisa diakses dengan cara getChildNode().item(0). Di sini terlihat bahwa sebuah element di xml, bisa direpresentasikan sebagai object bertipe Element maupun Node, tetapi text dari element adalah Node dan bukan Element (contoh: Text pada <First>Text</First> adalah Node, bukan Element, tetapi First bisa merupakan dua-duanya).

Untuk membuktikan apakah method parser telah berjalan dengan benar, saya telah membuat program yang akan memanggil method parser untuk mencoba memparsing informasi dari file xml tersebut:



 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;
 import java.util.*;import java.io.*;
 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 Parser
 {
public static void main(String args[]) throws Exception
{

String fileInput = args[0];
parser(fileInput);
}

// Taruh implementasi method parser di sini

}


 

 

Kemudian compile file Parser.java dan jalankan dengan command:  java Parser employee.xml

Hasil screenshot :