Tutorial Android : Cara Sederhana Parsing Data XML di Android

Hari senin datang lagi, hari yang dimana kata orang-orang itu membosankan. Karena bagi mereka yang sudah bekerja ataupun masih nangkring di bangku sekolah, akan dipadati dengan segudang aktivitas. Tak terkecuali saya, hari ini terasa begitu membosankan. Diawali dengan masuk kuliah di jam pertama dan ternyata dosennya (mungkin lagi malas) tidak mengajar. Di jam selanjutnya, ada mata kuliah design pattern yang kurang begitu greget. Jadilah saya nangkring di lantai 2 untuk melanjutkan sedikit pekerjaan yang siangnya akan saya bawa ke tempat client. Mungkin nasib lagi apes kali yaw, sudah saya datangi kesana ternyata si client gak nongol-nongol. Pas di perjalanan pulang sambil kadang-kadang melamun, tiba-tiba terlintas di pikiran saya bagaimana caranya mem-parsing data XML di aplikasi android. Kebetulan kemarin saya sudah membahas cara parsing data JSON ke dalam ListView, tak lengkap rasanya meninggalkan temannya yang satu ini.

“Kenapa XML…???” Mungkin karena si doi lebih populer terlebih dahulu daripada si JSON. Banyak aplikasi-aplikasi yang masih menggunakan format XML sebagai media pertukaran data. Padahal jika diadu, si JSON lebih unggul jauh dari si XML. Mulai dari kecepatan, penulisan yang gampang dan coding untuk parsing yang lebih ringkas+sederhana. Nah, di postingan kali ini saya akan berbagi sedikit cara untuk melakukan parsing data XML dan menampilkannya ke dalam textview. Referensinya saya ambil dari http://developer.android.com.

1. Seperti biasa, buat sebuah android project baru dengan detail seperti gambar di bawah ini :

2. Disini saya menggunakan DOM (Document Object Model) sebagai alat parsing-nya. DOM adalah object model standar untuk HTML dan XML yang sifatnya independent. Diawali dengan membaca link sumber dari file XML dengan membuat HTTP Request. Selanjutnya mem-parsing XML dan mengambil elemen DOM dari file XML. Terakhir, mengambil isi dari setiap elemen sesuai dengan nama node elemen. Buat file class baru dengan XMLParser.java.

public class XMLParser {

	public XMLParser() {

	}

	public String baca_xml_url(String url) {
		String xml = null;

		try {
			DefaultHttpClient httpClient = new DefaultHttpClient();
			HttpPost httpPost = new HttpPost(url);

			HttpResponse httpResponse = httpClient.execute(httpPost);
			HttpEntity httpEntity = httpResponse.getEntity();
			xml = EntityUtils.toString(httpEntity);

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return xml;
	}

	public Document ambil_elemen_dom(String xml){
		Document doc = null;
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {

			DocumentBuilder db = dbf.newDocumentBuilder();

			InputSource is = new InputSource();
		        is.setCharacterStream(new StringReader(xml));
		        doc = db.parse(is);

			} catch (ParserConfigurationException e) {
				Log.e("Error: ", e.getMessage());
				return null;
			} catch (SAXException e) {
				Log.e("Error: ", e.getMessage());
	            return null;
			} catch (IOException e) {
				Log.e("Error: ", e.getMessage());
				return null;
			}

	        return doc;
	}

	 public final String ambil_elemen_nilai( Node elem ) {
	     Node child;
	     if( elem != null){
	         if (elem.hasChildNodes()){
	             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
	                 if( child.getNodeType() == Node.TEXT_NODE  ){
	                     return child.getNodeValue();
	                 }
	             }
	         }
	     }
	     return "";
	 }

	 public String ambil_nilai(Element item, String str) {
			NodeList n = item.getElementsByTagName(str);
			return this.ambil_elemen_nilai(n.item(0));
		}
}

3. Sekarang kita akan memanfaatkan class XMLParser di atas untuk melakukan parsing data XML. Buka file ParsingXmlActivity.java, ketikkan kode di bawah ini. Datanya tidak saya tampilkan ke dalam ListView, tapi hanya ke dalam sebuah textview. Untuk menampilkan hasil parsing data XML ke ListView akan saya jelaskan di tutorial selanjutnya ;).

public class ParsingXmlActivity extends Activity {

	static final String URL = "http://10.0.2.2/json-parsing/artikel-xml.php";
	static final String AR_ITEM = "item";
	static final String AR_JUDUL = "judul";
	static final String AR_WAKTU = "waktu";
	static final String AR_ISI = "isi";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		XMLParser parser = new XMLParser();
		String xml = parser.baca_xml_url(URL);
		Document doc = parser.ambil_elemen_dom(xml);

		NodeList nd = doc.getElementsByTagName(AR_ITEM);

		String isi = "";
		TextView judul = (TextView) findViewById(R.id.isi);

		for (int i = 0; i < nd.getLength(); i++) {
			Element e = (Element) nd.item(i);
		    isi += parser.ambil_nilai(e, AR_JUDUL)+"\n"
		    		+parser.ambil_nilai(e, AR_WAKTU)+"\n"
		    		+parser.ambil_nilai(e, AR_ISI).substring(0, 100)+"...\n\n\n";
		}

	    judul.setText(isi);

	}
}

4. Karena textview tidak bisa diatur otomatis bisa melakukan scrooling, maka saya tambahkan ScroolView agar datanya terlihat semua sampai ke bawah. Buka file main.xml dan ketikkan kode di bawah ini.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    	android:padding="10dp"
    android:orientation="vertical">
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

	<TextView
            android:id="@+id/isi"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12sp"
            android:paddingBottom="2dip" />

    </ScrollView>
</LinearLayout>

5. Tambahkan permission untuk mengakses internet pada file AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dlmbg.pckg.parsing.xml"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ParsingXmlActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

6. Jalankan via emulator dan hasilnya kira-kira seperti gambar di bawah ini :

Memang agak lebih banyak coding yang dibutuhkan untuk melakukan parsing data XML dibandingkan dengan JSON. Contoh data yang terdapat di dalam file XML-nya saya ambil dari data yang sama pada tutorial parsing data JSON yang kemarin, hanya saja formatnya saya ubah ke dalam format XML. Nah, sekarang kita sudah mempunyai modal yang cukup untuk mulai membangun sebuah aplikasi database di platform android. Tinggal sekarang melatih dan mengasah kreatifitas kita yang sedang terpendam. OK deh, sekian dulu postingan saya kali ini dan semoga bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

[to_like]Download Aplikasi[/to_like]

10 comments

  1. Yugie Reply

    Gan, untuk kalau pas di klik buka detailsnya di class baru gmna ya? Thx 😀

  2. Dewi Reply

    makasiih bangeet, bermanfaat sekali. semoga ilmunya bermanfaat yaa :))

  3. zulkifli Reply

    kalau kita mengambil data dari sebuah webservice yg menyediakan jasa PElacakan, bisa tidak ?
    jadi nanti yang terlihat di android adalah sebuah peta webservice tersebut.
    gimna mas ?
    mohon jawaban nya, terima kasihh 🙂

  4. cecilia Reply

    kalo parsing data xml ke java gimana caranya yah ?
    jadi kan c client ngirim data xml ke server , lalu servernya mengambil data xml pake java , gimana caranya ??
    ada tutotrnya ga ? hehehehe

  5. erindrian Reply

    terima kasih mas, sangat membantu penulisan ilmiah saya saat ini. Semoga tulisan tulisan berkualitas selanjutnya di update terus tentang Pemrograman Android. Maju terus gedelumbung

  6. Rendra Reply

    makaci gan.. tutorialnya.. ijin copas.. smoga ilmunya bermanfaat..

  7. Ajus Reply

    coy….gimana cara nya biar rata kanan kiri textview nya di android
    saya lagi nyusun skripsi ni,,.sudah disearching di internet tapi belum ketemu,,.

    trima kasih,. 😀