Memparsing Data XML dengan SAX Parser di Android

7
168

Di dalam artikel saya ini, saya menuliskan tentang memparsing data, data yang digunakan merupakan data xml . cara yang saya ketahui untuk memparsing data XML khususnya di android yaitu

1. Menggunakan DOM (Document Object Model)

В В В В В В В В В В В В В В В В В В  DOM merupakan singkatan dari dari Document Object Model. DOM Parser menterjemahkan dokumen XML dan menempatkan elemen-elemen yang ditemuinya ketika memproses dokumen ke dalam struktur pohon. Informasi mengenai struktur dokumen kemudian disimpan ke dalam memori. Informasi yang didapat digunakan program aplikasi untuk mengakses dokumen XML.

Nah, logika algoritma menggunakan DOM 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.

2. Menggunakan SAX

В В В В В В В В В В В  SAX adalah singkatan dari Simple API for XML. API sendiri adalah singkatan dari Application Program Interface. Seperti namanya, dibanding DOM Parser, isi program SAX Parser lebih sederhana. SAX parser bekerja berdasarkan apa yang disebut event-based. SAX Parser berjalan menjelajahi dokumen. Begitu SAX Parser menemukan deklarasi sebuah elemen, ia akan mencatatnya dan menyimpannya dalam suatu event-handler. Event-handler inilah yang menyediakan akses ke isi dokumen XML.

Dari dua jenis parser yang dibahas di atas, sebenarnya tidak ada parser yang dapat dikatakan lebih unggul dari yang lain . Kedua Parser dapat dimanfaatkan secara optimal tergantung pada sifatВ  dokumen yang hendak di-parse.

В В В В В В В В В В В В В В  Bila dokumen XMLnya besar, menggunakan DOM Parser akan banyak memakan memori untuk menampilkan dokumen dalam struktur pohon 🙂 . Maka, agan-agan dianjurkan menggunakan SAX Parser karena lebih menguntungkan dari segi penghematan resource.

          Dan sebaliknya, untuk dokumen XML berskala kecil, agan-agan menggunakan DOM Parser lebih menguntungkan karena DOM Parser menyediakan struktur yang “siap pakai”, sehingga memudahkan program aplikasi dalam mengakses dokumen. Sedang bila  menggunakan SAX Parser, agan harus bekerja lebih keras dalam mengakses dokumen XML, karena ia harus mendefinisikan sendiri struktur dokumen XMLnya. Sehingga, program aplikasi yang dibuatnya lebih kompleks, akibatnya membebani prosesor yang mengeksekusinya.

В В В В В В В В В В В  nah, itulah sedikit pengetahuan tentang memparsing data. mungkin dibenak agan sekalian ini mau buat aplikasi atau mau kuliah?? kapan mulainyaВ  :batabig . haha 😀 Okey sesuai dengan judul saya akan membuat aplikasi SAX Parser di android.

sebelum membuat project di android siapkan terlebih dahulu file itemdata.xml. berikut isinya

<items>
<Dataku>
	<Nim> 080803069 </Nim>
	< Nama > Muhammad Iqbal Pradipta </Nama>
	< Fakultas > MIPA </Fakultas>
	< Jurusan >Matematika </Jurusan >
</Dataku>
<Dataku> 
	<Nim>080803071</Nim>
	<Nama>Al Mifdhal</Nama>
	<Fakultas>MIPA</Fakultas>
	<Jurusan>Matematika</Jurusan>
</Dataku>
<Dataku> 
	<Nim>080803031</Nim>
	<Nama>Muhammad Hanafi Harahap</Nama>
	<Fakultas>MIPA</Fakultas>
	<Jurusan>Matematika</Jurusan>
</Dataku>
</items>

Berikut langkah-langkahnya :

1. Buat New Project dari File>New>Android Application dengan ketentuan berikut:

  • Project Name : Main
  • Build Target : Android2.2
  • Application name : SAXParser
  • Package name : study.parser
  • Activity : Main
  • MinSDK : 8
  • Click Finish

2. Setelah project tercreate maka secara otomatis membentuk 3 file yaitu:

  • main.xml
  • string.xml
  • Main.java

3. Edit main.xml ketikkan kode berikut ini

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

<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/hello"
 android:id="@ id/text"/>
</LinearLayout>

4. Edit file Main.java copykan file dibawah

package study.parser;
import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Main extends Activity {

private TextView output;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

output = (TextView) findViewById (R.id.text);
parseXML();

}

private void parseXML()
{
String parsedata = "";
try{
SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

XMLReader xr = sp.getXMLReader();

/** Mengirimkan URL untuk memparsing tag XML */

URL sourceUrl = new URL(

"http://10.0.2.2/android/itemdata.xml");

/** membuat efek handler untuk http://www.phpaide.com/demos/ContactForm/ menghandle tag-tag XMLВ  ( turunan dari class DefaultHandler ) */

ContentHandler handler = new ContentHandler();

xr.setContentHandler(handler);

xr.parse(new InputSource(sourceUrl.openStream()));

ArrayList<Study> liststudy = handler.getListStudy();
for(int i=0;i<liststudy.size();i ){
Study std = liststudy.get(i);
parsedata = parsedata "\n";
parsedata = parsedata "Nim: " std.getNim() "\n";
parsedata = parsedata "Nama: " std.getNama() "\n";
parsedata = parsedata "Fakultas: " The Q1 launch of the new mobile online casino application assisted double Interwetten’s H1 mobile When there is no more debt association it changes from credit reporting agencies to money due to our current laws. You even secretly dream of being abducted by your lover on Valentine"s Day!You will find on Astrotheme thousands of natal charts of celebrities who have the Sun in Pisces, best-horoscope.com rising, or Neptune dominant. revenues, and mobile’s share of overall sports bets elevated to 40%. std.getFakultas() "\n";
parsedata = parsedata "Jurusan: " std.getJurusan() "\n";
}
}catch(Exception e)
{
System.out.println("XML Pasing Excpetion = " e);
}
output.setText(parsedata);
}

}

5. Buat file casino online Study.java dengan file tersebut masih didalam satu paket di package study.parser:

package study.parser;
public class Study {
String Nim = null;
String Nama = null;
String Fakultas = null;
String Jurusan = null;
public String getNim()
{
	return Nim;
}

public void setNim (String Nim)
{
	this.Nim = Nim;
}

public String getNama()
{
	return Nama;
}

public void setNama(String nama)
{
	this.Nama = nama;
}

public String getFakultas()
{
	return Fakultas;
}

public void setFakultas(String fakultas)
{
	this.Fakultas = fakultas;
}

public String getJurusan()
{
	return Jurusan;
}

public void setJurusan(String jurusan)
{
	this.Jurusan = jurusan;
}
}

6. Buat file ContentHandler.java dan dengan saran yang sama file tersebut masih didalam satu paket di package study.parser:

package study.parser;
import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ContentHandler extends DefaultHandler{

boolean currentElement = false;
String currentValue = "";
Study std = null;

private ArrayList liststudy = new ArrayList();

public ArrayList getListStudy()
{
	return liststudy;
}

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

	currentElement = true;
	currentValue = "";
	if (localName.equals("Dataku"))

	{

		/** Memulai tag */

		std = new Study();

	}
}

/** dipanggil ketika tag ditutup

**/

@Override

public void endElement(String uri, String localName, String qName)

throws SAXException {

currentElement = false;

/** mengeset masing-masing tag nilai di dalam xml */

if (localName.equalsIgnoreCase("Nim"))

std.setNim(currentValue);

else if (localName.equalsIgnoreCase("Nama"))

std.setNama(currentValue);

else if (localName.equalsIgnoreCase("Fakultas"))

	std.setFakultas(currentValue);

else if (localName.equalsIgnoreCase("Jurusan"))

	std.setJurusan(currentValue);

else if (localName.equalsIgnoreCase("Dataku"))

	liststudy.add(std);

}

/** dipanggil untuk mengambil tag character
**/

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

if (currentElement) {

currentValue = currentValue new String(ch, start, length);

currentElement = false;

}
}
}

perhatikan potongan program file ContentHandler.java

@Override

public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
	currentElement = true;
	currentValue = "";
	if (localName.equals("Dataku"))
	{
		/** Memulai tag */
		std = new Study();
	}
}

Nah, didalam file ContentHandler.java merupakan turunan dari class DefaultHandler. ada 3 buah fungsi yang dioverride yaitu fungsi startElement untuk memulai elemen yang pertama, saya menaruh nilai elemen yaitu “Dataku” dan kemudian membuat objek dari file Study.java yaitu std = new Study().

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
/** mengeset masing-masing tag nilai di dalam xml */
if (localName.equalsIgnoreCase("Nim"))
std.setNim(currentValue);
else if (localName.equalsIgnoreCase("Nama"))
std.setNama(currentValue);
else if (localName.equalsIgnoreCase("Fakultas"))
	std.setFakultas(currentValue);
else if (localName.equalsIgnoreCase("Jurusan"))
	std.setJurusan(currentValue);
else if (localName.equalsIgnoreCase("Dataku"))
	liststudy.add(std);
}

kalau di fungsi endElement berfungsi untuk mengakhiri elemen dari tag xml, dan masing-masing tag kemudian di set kedalam fungsi setter yang ada di file Study.java.

Semua nilai yang ada di elemen tag xml sebenarnya sudah masuk. di dalam file Main.java terdapat potongan berikut untuk menampilkan semua nilai elemen. elemen yang disusun dimasukkan ke dalam ArrayList

ArrayList liststudy = handler.getListStudy();
for(int i=0;i<liststudy.size();i ){
Study std = liststudy.get(i);
parsedata = parsedata "\n";
parsedata = parsedata "Nim: " std.getNim() "\n";
parsedata = parsedata "Nama: " std.getNama() "\n";
parsedata = parsedata "Fakultas: " std.getFakultas() "\n";
parsedata = parsedata "Jurusan: " std.getJurusan() "\n";
}

7. di dalam file AndroidManifest.xml jangan lupa masukkan android permission sebagai berikut

<uses-permission android:name="android.permission.INTERNET" />

8. Run programmnya gaaaaaaaannnnnnnnn !! 😀 Berikut tampilannya.

Semoga bermanfaat,

Best Regards
Mhd Iqbal Pradipta

7 COMMENTS

  1. gan..ane kn nemu source code game..trs ane edit2 icon dan lain ny..tpi knp klo package name nya di ganti kq game ny error..tpi klo package name ny masih asli game ny bisa jalan dan editan ny pun berjalan normal..kira2 knp ea gan?? apa package name ny dah di setting yg punya agar g bs di rename…mhon bantuan ny gan..

  2. chandra : kalau boleh tau di folder mana chandra taruh file di htdocs nya? coba tuliskan dulu path nya ya 🙂
    terus coba liat di logcat android apa kata errornya… itu juga coba di taruh saya mau liat 🙂

  3. saya sudah melakukan semuanya, tapi hasilnya tetap kosong ditampilannya,,,udah ditaruh di web server juga file xmlnya tetep aja tidak keluar hasil

  4. bukan faradina, file itemdata.xml bukan ditaruh di folder projek… tapi ditaruh di web server… hehe coba di test lagi… folder android di 10.0.2.2/android adalah folder baru di htdocsnya…

  5. gan, mau nanya. itu file itemdata.xml nya cukup ditaruh di folder projek nya aja kan?
    tapi kok ga jalan ya di saya?

    tampilannya kosong. ga ada isinya. masalahnya kira2 apa ya gan? trims

LEAVE A REPLY