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}