Clase XMLParser

{code}

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.util.Log;

public class XMLParser {
    
    public String getXmlFromUrl(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) {
            Log.e("XMLParser", "Error: "+e.getMessage());
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            Log.e("XMLParser", "Error: "+e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            Log.e("XMLParser", "Error: "+e.getMessage());
            e.printStackTrace();
        }
        return xml;
    }

    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("XMLParser", "Error: "+e.getMessage());
            e.printStackTrace();
            return null;
        } catch (SAXException e) {
            Log.e("XMLParser", "Error: "+e.getMessage());
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            Log.e("XMLParser", "Error: "+e.getMessage());
            e.printStackTrace();
            return null;
        }
        return doc;
    }

    public String getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        Node nodo = n.item(0);
        if (nodo != null) {
            if (nodo.hasChildNodes()) {
                for (Node child = nodo.getFirstChild(); child != null; child = child.getNextSibling()) {
                    if (child.getNodeType() == Node.TEXT_NODE) {
                        return child.getNodeValue();
                    }
                }
            }
        }
        return "";        
    }

}

{/code}

Activity que muestra contenido XML en un ListView

{code}

import java.util.ArrayList;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;

/* Requiere el permiso android.permission.INTERNET */

public class MainActivity extends Activity {

    ProgressBar progressBar1;
    ListView listView1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView1 = (ListView) findViewById(R.id.listView1);
        progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar1.setVisibility(View.INVISIBLE);
        
        new DescargaXML().execute("http://pruebas.javiergarbedo.es/agenda_xml/agenda_lista.xml");
    }

    public class DescargaXML extends AsyncTask<String, Void, String> {

        static final String KEY_ITEM = "CONTACTO";
        static final String KEY_ID = "ID";
        static final String KEY_NOMBRE = "NOMBRE";
        static final String KEY_APELLIDOS = "APELLIDOS";

        private XMLParser parser;
        
        @Override
        protected String doInBackground(String... url) {
            parser = new XMLParser();
            // Recoger la dirección del archivo XML que se ha pasado como parámetro
            //        al llamar al método execute
            String agendaXML = parser.getXmlFromUrl(url[0]);
            
            // Esto que se retorna, lo recibirá onPostExecute por parámetro
            // Es el contenido del archivo XML como String
            return agendaXML;
        }
        

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar1.setVisibility(View.VISIBLE);
        }

        
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            
            // ArrayList que va a almacenar la lista de contactos para asignársela al ListVew
            ArrayList<ContactoCorto> arrayListContactos = new ArrayList<ContactoCorto>();
            
            // En el parámetro result se ha recibido el contenido del archivo XML como String
            Document docAgendaXML = parser.getDomElement(result);
            // Obtener la lista de nodos del documento XML
            NodeList listaNodosContactoXML = docAgendaXML.getElementsByTagName(KEY_ITEM);
            
            // Recorrer la lista de nodos para obtener los datos de cada elemento
            for (int i = 0; i < listaNodosContactoXML.getLength(); i++) {
                Element elementoContactoXML = (Element) listaNodosContactoXML.item(i);
                // Obtener los datos de ese elemento
                String id = parser.getValue(elementoContactoXML, KEY_ID);
                String nombre = parser.getValue(elementoContactoXML, KEY_NOMBRE);
                String apellidos = parser.getValue(elementoContactoXML, KEY_APELLIDOS);
                // Guardar los datos en un objeto y almacenarlo en el ArrayList
                ContactoCorto contactoCorto = new ContactoCorto(id, nombre, apellidos);
                arrayListContactos.add(contactoCorto);
            }
            
            // Asignar el ArrayList al ListView de la pantalla
            ArrayAdapter<ContactoCorto> adapter = new ArrayAdapter<ContactoCorto>(MainActivity.this,
                    android.R.layout.simple_list_item_1, arrayListContactos);
            listView1.setAdapter(adapter);
            
            progressBar1.setVisibility(View.INVISIBLE);
        
        }        

    }

}

{/code}

Clase Java ContactoCorto

{code}

public class ContactoCorto {
    private String id;
    private String nombre;
    private String apellidos;
    
    public ContactoCorto(String id, String nombre, String apellidos) {
        super();
        this.id = id;
        this.nombre = nombre;
        this.apellidos = apellidos;
    }
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    @Override
    public String toString() {
        return nombre + " " + apellidos;
    }
        
}

{/code}

Archivo XML de ejemplo

{code class="brush:xml"}

<AGENDA>
<CONTACTO>
  <NOMBRE>AMADOR</NOMBRE>
  <APELLIDOS>OSSORIO MUÑOZ</APELLIDOS>
  <TELEFONO>684402588</TELEFONO>
  <EMAIL>amaoss53 @ hotmail.com</EMAIL>
</CONTACTO>
<CONTACTO>
  <NOMBRE>BALTASAR</NOMBRE>
  <APELLIDOS>LORENTE  FERNANDEZ</APELLIDOS>
  <TELEFONO>675435350</TELEFONO>
  <EMAIL>ballor65 @ hotmail.com</EMAIL>
</CONTACTO>
<CONTACTO>
  <NOMBRE>JESUS</NOMBRE>
  <APELLIDOS>PEDRO IGLESIAS </APELLIDOS>
  <TELEFONO>611932600</TELEFONO>
  <EMAIL>jesped87 @ hotmail.com</EMAIL>
</CONTACTO>
<CONTACTO>
  <NOMBRE>MARIA DOLORES</NOMBRE>
  <APELLIDOS>SAHELICES DOMINGUEZ</APELLIDOS>
  <TELEFONO>675378525</TELEFONO>
  <EMAIL>marsah68 @ hotmail.com</EMAIL>
</CONTACTO>

{/code}