Struktur XML
Dalam tutorial ini saya akan akan parsing file XML berikut. Anda bisa mendapatkan file xml ini dengan mengakses http://api.androidhive.info/pizza/?format=xml
Membuat XML Parser Class
Dalam proyek Anda buat file class dan beri nama sebagai XMLParser.java. Dengan Kelas parser utama ini akan melakukan perintah berikut.
⇒ Mendapatkan konten XML dengan membuat permintaan HTTP
⇒ Parsing XML konten dan mendapatkan elemen DOM dari xml.
⇒ Dapatkan setiap nilai elemen anak xml dengan melewati elemen nama node.
Mendapatkan konten XML dengan membuat HTTP Request
Fungsi ini akan mendapatkan XML dengan membuat Permintaan HTTP.
public String getXmlFromUrl(String url) { String xml = null; try { // defaultHttpClient 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 return xml; }Parsing XML konten dan mendapatkan elemen DOM
Setelah mendapatkan konten XML kita perlu mendapatkan elemen DOM dari file XML. Di bawah ini fungsi untuk mengurai isi XML dan akan memberikan elemen DOM.
public Document getDomElement(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 DOM return doc; }Mendapatkan setiap nilai elemen xml
public String getValue(Element item, String str) { NodeList n = item.getElementsByTagName(str); return this.getElementValue(n.item(0)); } public final String getElementValue( 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 ""; }
penggunaan
Berikut adalah potongan kode untuk menangani operasi xml. Kita akan gunakan class xml parser untuk mendapatkan data dari xml.
// All static variables static final String URL = "http://api.androidhive.info/pizza/?format=xml"; // XML node keys static final String KEY_ITEM = "item"; // parent node static final String KEY_NAME = "name"; static final String KEY_COST = "cost"; static final String KEY_DESC = "description"; XMLParser parser = new XMLParser(); String xml = parser.getXmlFromUrl(URL); // getting XML Document doc = parser.getDomElement(xml); // getting DOM element NodeList nl = doc.getElementsByTagName(KEY_ITEM); // looping through all item nodes for (int i = 0; i < nl.getLength(); i++) { String name = parser.getValue(e, KEY_NAME); // name child value String cost = parser.getValue(e, KEY_COST); // cost child value String description = parser.getValue(e, KEY_DESC); // description child value }Parsing data XML dan mengupdate ke ListView
Dalam tutorial saya sebelumnya Tutorial Android Menggunakan Listview saya menjelaskan cara membuat ListView dan memperbarui dengan data daftar. Di bawah ini saya akan menerapkan ListView yang sama tetapi data daftar yang akan di perbarui adalah dari xml parsing. ListView ini memiliki beberapa sub teks seperti nama, biaya dan deskripsi.
public class AndroidXMLParsingActivity extends ListActivity { // All static variables static final String URL = "http://api.androidhive.info/pizza/?format=xml"; // XML node keys static final String KEY_ITEM = "item"; // parent node static final String KEY_ID = "id"; static final String KEY_NAME = "name"; static final String KEY_COST = "cost"; static final String KEY_DESC = "description"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList> menuItems = new ArrayList>(); XMLParser parser = new XMLParser(); String xml = parser.getXmlFromUrl(URL); // getting XML Document doc = parser.getDomElement(xml); // getting DOM element NodeList nl = doc.getElementsByTagName(KEY_ITEM); // looping through all item nodes for (int i = 0; i < nl.getLength(); i++) { // creating new HashMap HashMap map = new HashMap(); Element e = (Element) nl.item(i); // adding each child node to HashMap key => value map.put(KEY_ID, parser.getValue(e, KEY_ID)); map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST)); map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); // adding HashList to ArrayList menuItems.add(map); } // Adding menuItems to ListView ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.list_item, new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] { R.id.name, R.id.desciption, R.id.cost }); setListAdapter(adapter); // selecting single ListView item ListView lv = getListView(); // listening to single listitem click lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // getting values from selected ListItem String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString(); String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString(); // Starting new intent Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); in.putExtra(KEY_NAME, name); in.putExtra(KEY_COST, cost); in.putExtra(KEY_DESC, description); startActivity(in); } }); } }
0 Response to "Tutorial XML Parsing Android"
Post a Comment