Tutorial XML Parsing Android

Hari ini saya akan membahas tentang parsing XML di android menggunakan DOM parser. Selain itu juga saya akan menunjukkan cara memperbarui ListView dengan data XML parsing.

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 


    
        1   
        Margherita
        155
        Single cheese topping
    
    
        2   
        Double Cheese Margherita
        225
        Loaded with Extra Cheese
    
    
        3   
        Fresh Veggie
        110
        Oninon and Crisp capsicum
    
    
        4   
        Peppy Paneer
        155
        Paneer, Crisp capsicum and Red pepper
    
    
        5   
        Mexican Green Wave
        445
        Onion, Crip capsicum, Tomato with mexican herb
    

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