anexo xml en android

18
1 XML en Android XML en Android Para trabajar con archivos XML en Android disponemos de los siguientes modelos: SAX Simple API for XML org.xml.sax DOM Document Object Model org.w3c.dom XmlPull Versión de StAX org.xmlpull.v1.XmlPullParser

Upload: mirador-montepinar

Post on 03-Dec-2015

19 views

Category:

Documents


1 download

DESCRIPTION

bien echo

TRANSCRIPT

Page 1: Anexo XML en Android

1

XML en Android

XML en Android

Para trabajar con archivos XML en Android disponemos de los siguientes modelos:

SAX Simple API for XML org.xml.sax

DOM Document Object Model org.w3c.dom

XmlPull Versión de StAX org.xmlpull.v1.XmlPullParser

Page 2: Anexo XML en Android

2

SAX

XML en Android

En el modelo SAX se utiliza un analizador (parser) que a medida que lee secuencialmente el documento XML va generando diferentes eventos con la información de cada elemento leído

<?xml version="1.0" encoding="UTF-8"?> <contactosclientes> <contactocliente> <cliente> Cliente11 </cliente> <telefono> 911111111 </telefono> <email> [email protected] </email> </contactocliente> </contactosclientes>

startDocument() startElement() startElement() characters() endElement() startElement() characters() endElement() startElement() characters() endElement() endElement() endDocument()

Estos métodos los deberemos implementar en una clase derivada de DefaultHandler

Page 3: Anexo XML en Android

3

SAX

XML en Android

Page 4: Anexo XML en Android

4

SAX - contactos_clientes.xml

XML en Android

<?xml version="1.0" encoding="UTF-8"?> <contactosclientes> <contactocliente> <cliente>Cliente11</cliente> <telefono>911111111</telefono> <email>[email protected]</email> </contactocliente> <contactocliente> <cliente>Cliente22</cliente> <telefono>922222222</telefono> <email>[email protected]</email> </contactocliente> <contactocliente> <cliente>Cliente33</cliente> <telefono>933333333</telefono> <email>[email protected]</email> </contactocliente> </contactosclientes>

Page 5: Anexo XML en Android

5

SAX - activity_main.xml

XML en Android

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dip" > <Spinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

Page 6: Anexo XML en Android

6

SAX - list_item.xml

XML en Android

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/title" style="@style/spinner" />

Page 7: Anexo XML en Android

7

SAX - ContactosClientes.java

XML en Android

public class ContactosClientes { private String cliente; private String telefono; private String email; public String getCliente() {return cliente;} public void setCliente(String cliente) {this.cliente = cliente;} public String getTelefono() {return telefono;} public void setTelefono(String telefono) {this.telefono = telefono;} public String getEmail() {return email;} public void setEmail(String email) {this.email = email;} @Override public String toString() {return cliente;} public String getDetallesClientes() { String result = cliente + "\n" + telefono + "\n" + email; return result; } }

Page 8: Anexo XML en Android

8

SAX - HandlerXmlSax.java

XML en Android

public class HandlerXmlSax extends DefaultHandler { private List<ContactosClientes> contactosClientes; private String tempCaracteres; private ContactosClientes tempContactosClientes; public HandlerXmlSax() { contactosClientes = new ArrayList<ContactosClientes>();} public List<ContactosClientes> getContactosClientes() {return contactosClientes;} public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

tempCaracteres = ""; if (qName.equalsIgnoreCase("contactocliente")) tempContactosClientes = new ContactosClientes(); } public void characters(char[] ch, int start, int length) throws SAXException { tempCaracteres = new String(ch, start, length); } public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("contactocliente")) { contactosClientes.add(tempContactosClientes); } else if (qName.equalsIgnoreCase("cliente")) { tempContactosClientes.setCliente(tempCaracteres); } else if (qName.equalsIgnoreCase("telefono")) { tempContactosClientes.setTelefono(tempCaracteres); } else if (qName.equalsIgnoreCase("email")) { tempContactosClientes.setEmail(tempCaracteres); } } }

Page 9: Anexo XML en Android

9

SAX - ParserXmlSax.java

XML en Android

public class ParserXmlSax { public static List<ContactosClientes> parse(InputStream is) { List<ContactosClientes> contactosClientes = null; try { // Se crea el XMLReader XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); // Se crea el HandlerXmlSax HandlerXmlSax saxHandler = new HandlerXmlSax(); // Se registra el handler para poder gestionar los eventos xmlReader.setContentHandler(saxHandler); // Se lee el archivo XML xmlReader.parse(new InputSource(is)); // Se obtiene la lista de contactos de clientes contactosClientes = saxHandler.getContactosClientes(); } catch (Exception ex) { Log.e("ParserXmlSax", ex.getMessage()); } // Retorna la lista de contactos de clientes` return contactosClientes; } }

Page 10: Anexo XML en Android

10

SAX - MainActivity.java

XML en Android

public class MainActivity extends Activity implements OnItemSelectedListener { Spinner spinner; TextView textView1; List<ContactosClientes> contactosClientes = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner = (Spinner) findViewById(R.id.spinner); textView1 = (TextView) findViewById(R.id.textView1); try { contactosClientes = ParserXmlSax.parse(getAssets().open("contactos_clientes.xml")); ArrayAdapter<ContactosClientes> adapter = new ArrayAdapter<ContactosClientes>(this, R.layout.list_item, contactosClientes); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); } catch (Exception e) { Log.e("ERROR OnCreate", e.getMessage());} } @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { ContactosClientes contactosClientes = (ContactosClientes) parent.getItemAtPosition(pos); textView1.setText(contactosClientes.getDetallesClientes()); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }

Page 11: Anexo XML en Android

11

DOM

XML en Android

Page 12: Anexo XML en Android

12

DOM

XML en Android

Page 13: Anexo XML en Android

13

DOM - activity_main.xml

XML en Android

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent” android:layout_height="match_parent" android:background="#000000" android:orientation="vertical" android:padding="16dp" tools:context=".MainActivity" > <Button android:id="@+id/buttonUltimasNoticias" android:layout_width="match_parent” android:layout_height="wrap_content" android:text="Últimas noticias" android:textColor="#FFFFFF" /> <ScrollView android:id="@+id/sv" android:layout_width="match_parent” android:layout_height="match_parent" android:scrollbarStyle="insideInset" > <TextView android:id="@+id/textViewNoticias" android:layout_width="match_parent” android:layout_height="match_parent" android:layout_marginLeft="5dp" android:background="#FFFFFF" android:padding="5dp" android:textColor="#222222" /> </ScrollView> </LinearLayout>

Page 14: Anexo XML en Android

14

DOM - Noticia.java

XML en Android

public class Noticia { private String titulo; private String link; private String descripcion; public String getTitulo() { return titulo; } public void setTitulo(String t) { titulo = t;} public String getLink() { return link; } public void setLink(String l) { link = l; } public String getDescripcion() { return descripcion; } public void setDescripcion(String d) { descripcion = d; } }

Page 15: Anexo XML en Android

15

DOM - ParserRssDom.java (1)

XML en Android

public class ParserRssDom { private URL rssUrl; public ParserRssDom(String url) { try {this.rssUrl = new URL(url); } catch (MalformedURLException e) {throw new RuntimeException(e);} } private String obtenerTexto(Node dato) { StringBuilder texto = new StringBuilder(); NodeList fragmentos = dato.getChildNodes(); for (int k = 0; k < fragmentos.getLength(); k++) { texto.append(fragmentos.item(k).getNodeValue()); } return texto.toString(); } private InputStream getInputStream() { try {return rssUrl.openConnection().getInputStream(); } catch (IOException e) {throw new RuntimeException(e);} } // ...

Page 16: Anexo XML en Android

public List<Noticia> parse() { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); List<Noticia> noticias = new ArrayList<Noticia>(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document dom = builder.parse(this.getInputStream()); Element root = dom.getDocumentElement(); NodeList items = root.getElementsByTagName("item"); for (int i = 0; i < items.getLength(); i++) { Noticia noticia = new Noticia(); Node item = items.item(i); NodeList datosNoticia = item.getChildNodes(); for (int j = 0; j < datosNoticia.getLength(); j++) { Node dato = datosNoticia.item(j); String etiqueta = dato.getNodeName(); if (etiqueta.equals("title")) { String texto = obtenerTexto(dato); noticia.setTitulo(texto); } else if (etiqueta.equals("link")) { noticia.setLink(dato.getFirstChild().getNodeValue()); } else if (etiqueta.equals("description")) { String texto = obtenerTexto(dato); noticia.setDescripcion(texto); } noticias.add(noticia); } } catch (Exception ex) {throw new RuntimeException(ex);} return noticias; } 16

DOM - ParserRssDom.java (2)

XML en Android

Page 17: Anexo XML en Android

public class MainActivity extends Activity { private Button btnUltimasNoticias; private TextView tvNoticias; private List<Noticia> listUltimasNoticias; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnUltimasNoticias = (Button) findViewById(R.id.buttonUltimasNoticias); tvNoticias = (TextView) findViewById(R.id.textViewNoticias); btnUltimasNoticias.setOnClickListener(new OnClickListener() { public void onClick(View v) { CargarNoticiasRss tarea = new CargarNoticiasRss(); tarea.execute("http://ep00.epimg.net/rss/tags/ultimas_noticias.xml"); } }); } // ...

17

DOM - MainActivity.java (1)

XML en Android

Page 18: Anexo XML en Android

18

DOM - MainActivity.java (2)

XML en Android

// Tarea Asíncrona para cargar las noticias en segundo plano private class CargarNoticiasRss extends AsyncTask<String, Integer, Boolean> { protected Boolean doInBackground(String... params) { ParserRssDom parserRssDom = new ParserRssDom(params[0]); listUltimasNoticias = parserRssDom.parse(); return true; } protected void onPostExecute(Boolean result) { tvNoticias.setText(""); for (int i = 0; i < listUltimasNoticias.size(); i++) { tvNoticias.setText(tvNoticias.getText().toString() + System.getProperty("line.separator") + listUltimasNoticias.get(i).getTitulo() + "\n"); } } } } // public class MainActivity extends Activity