Hari ini saya akan membahas tentang parsing XML di android menggunakan DOM parser. Juga saya menunjukkan cara memperbarui ListView dengan data XML parsing.
truktur 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
<?xml version="1.0" encoding="UTF-8"?>
<menu>
    <item>
        <id>1</id>   
        <name>Margherita</name>
        <cost>155</cost>
        <description>Single cheese topping</description>
    </item>
    <item>
        <id>2</id>   
        <name>Double Cheese Margherita</name>
        <cost>225</cost>
        <description>Loaded with Extra Cheese</description>
    </item>
    <item>
        <id>3</id>   
        <name>Fresh Veggie</name>
        <cost>110</cost>
        <description>Oninon and Crisp capsicum</description>
    </item>
    <item>
        <id>4</id>   
        <name>Peppy Paneer</name>
        <cost>155</cost>
        <description>Paneer, Crisp capsicum and Red pepper</description>
    </item>
    <item>
        <id>5</id>   
        <name>Mexican Green Wave</name>
        <cost>445</cost>
        <description>Onion, Crip capsicum, Tomato with mexican herb</description>
    </item>
</menu>
Menulis XML Parser Kelas
Dalam proyek Anda membuat file kelas dan nama itu sebagai XMLParser.java. Kelas parser terutama berkaitan operasi berikut.
Mendapatkan konten XML dengan membuat permintaan HTTP 
Parsing konten XML dan mendapatkan elemen DOM dari xml. 
Dapatkan setiap xml nilai elemen anak 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 fungsi akan 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;
    }
Dapatkan setiap nilai elemen anak xml dengan melewati elemen nama node
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 "";
  }
Pemakaian
Berikut adalah potongan kode untuk menangani operasi xml. Saya menggunakan xml kelas parser sejauh ini kami dibangun dan perulangan melalui setiap elemen xml dan mendapatkan data anak.
// 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 <item>     
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 memperbarui ke ListView
Dalam tutorial saya sebelumnya Android ListView Tutorial saya menjelaskan cara membuat ListView dan memperbarui dengan data daftar. Di bawah ini saya menerapkan ListView yang sama namun daftar data yang saya memperbarui 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<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        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 <item>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            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);

            }
        });
    }
}


selanjutnya coba test aplikasi di smartphone android anda 
semoga sukses