<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=PDM_Avanzado_Procesar_arquivos_XML</id>
	<title>PDM Avanzado Procesar arquivos XML - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=PDM_Avanzado_Procesar_arquivos_XML"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=PDM_Avanzado_Procesar_arquivos_XML&amp;action=history"/>
	<updated>2026-10-17T11:40:27Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=PDM_Avanzado_Procesar_arquivos_XML&amp;diff=1019&amp;oldid=prev</id>
		<title>Wiki: Página creada con «==Introdución==  O XML é unha linguaxe de marcas en formato de texto moi útil para o intercambio de información entre diferentes plataformas.  * Máis información: htt...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=PDM_Avanzado_Procesar_arquivos_XML&amp;diff=1019&amp;oldid=prev"/>
		<updated>2016-06-04T15:51:47Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «==Introdución==  O XML é unha linguaxe de marcas en formato de texto moi útil para o intercambio de información entre diferentes plataformas.  * Máis información: htt...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introdución==&lt;br /&gt;
&lt;br /&gt;
O XML é unha linguaxe de marcas en formato de texto moi útil para o intercambio de información entre diferentes plataformas.&lt;br /&gt;
&lt;br /&gt;
* Máis información: http://es.wikipedia.org/wiki/Extensible_Markup_Language&lt;br /&gt;
* Información para aprender a facer arquivos xml: http://www.w3schools.com/xml/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un exemplo de arquivo XML pode ser o seguinte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;contactos&amp;gt;&lt;br /&gt;
    &amp;lt;contacto&amp;gt;&lt;br /&gt;
	    &amp;lt;nome&amp;gt;Angel&amp;lt;/nome&amp;gt;&lt;br /&gt;
	    &amp;lt;dir&amp;gt;C/ de Ala nº 12&amp;lt;/dir&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;fixo&amp;quot;&amp;gt;981111111&amp;lt;/tel&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;mobil&amp;quot;&amp;gt;691111111&amp;lt;/tel&amp;gt;&lt;br /&gt;
    &amp;lt;/contacto&amp;gt;&lt;br /&gt;
    &amp;lt;contacto&amp;gt;&lt;br /&gt;
	    &amp;lt;nome&amp;gt;Luis&amp;lt;/nome&amp;gt;&lt;br /&gt;
	    &amp;lt;dir&amp;gt;C/ de Acola nº 55&amp;lt;/dir&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;fixo&amp;quot;&amp;gt;982222222&amp;lt;/tel&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;mobil&amp;quot;&amp;gt;692222222&amp;lt;/tel&amp;gt;&lt;br /&gt;
    &amp;lt;/contacto&amp;gt;&lt;br /&gt;
&amp;lt;/contactos&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Nesta unidade imos aprender como podemos ler o contido do arquivo e trasladar os datos ó noso programa (poden ser elementos gráficos coma listas ou bases de datos, como xa vimos).&lt;br /&gt;
&lt;br /&gt;
==Procesando arquivos XML==&lt;br /&gt;
&lt;br /&gt;
Para ler un arquivo XML temos dúas aproximacións:&lt;br /&gt;
&lt;br /&gt;
* DOM: Document Object Model. Ten coma principal desvantaxe que é necesario gardar todo o documento en memoria e coma principal vantaxe que podemos acceder a calquera parte do documento indo cara adiante ou cara atrás.&lt;br /&gt;
* SAX, que ven a ser usar XmlPullParser en Android: non podemos movernos pola estrutura xml e só gardamos en memoria o que imos lendo. &lt;br /&gt;
&lt;br /&gt;
Os pasos que temos que dar para ler e procesar un arquivo XML son:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Paso 1&amp;#039;&amp;#039;&amp;#039;: Crear un obxecto da [http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html clase XmlPullParser] e asinarlle o InputStream do arquivo que queremos ler.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
InputStream is = getAssets().open(&amp;quot;ArquivoXML.xml&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
XmlPullParser parser = Xml.newPullParser();&lt;br /&gt;
parser.setInput(is, &amp;quot;UTF-8&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Xa vimos nas unidades anteriores como obter un InputStream.&lt;br /&gt;
&lt;br /&gt;
O método setInput espera recibir o InputStream como primeiro parámetro e o xogo de caracteres como segundo. Pode producir unha excepción &amp;#039;XmlPullParserException&amp;#039; polo que a engadimos as excepcións que pode producir a execución do método (throws ou try).&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Paso 2&amp;#039;&amp;#039;&amp;#039;: Agora necesitamos avanzar polo &amp;#039;árbol&amp;#039; xml. Neste punto podemos utilizar os seguintes métodos:&lt;br /&gt;
&lt;br /&gt;
:* Chamando ó &amp;#039;&amp;#039;&amp;#039;método next()&amp;#039;&amp;#039;&amp;#039;. Cada vez que chamamos a dito método avanzamos de elemento e ó mesmo tempo &amp;#039;producimos&amp;#039; eventos como son: principio de documento, fin de documento, apertura de etiquete, pecha de etiqueta,....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;u&amp;gt;Aviso:&amp;lt;/u&amp;gt; Poderíamos ler todo o documento utilizando este método, pero hai que ter coidado xa que o documento xml non debería ter saltos de liña (como está no exemplo) xa que eses caracteres tamén son lidos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::Para saber o evento que se produce facemos o seguinte:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
       int evento = parser.next();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
::Se queremos percorrer todo a árbore ata chegar ó fin do documento:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
       int evento = parser.next();&lt;br /&gt;
       while(evento != XmlPullParser.END_DOCUMENT) {&lt;br /&gt;
        	&lt;br /&gt;
        	evento = parser.next();&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:* Chamando ó método &amp;#039;&amp;#039;&amp;#039;nextTag()&amp;#039;&amp;#039;&amp;#039;: Neste caso chama a next() e devolve un evento se estamos situados nun START_TAG ou END_TAG. En caso contrario devolve unha excepción.&lt;br /&gt;
&lt;br /&gt;
:* Chamando ó método &amp;#039;&amp;#039;&amp;#039;nextText()&amp;#039;&amp;#039;&amp;#039;: Se estamos situados nun START_TAG, ó chamar a dito método devolve a cadea (o texto) que se atopa entre o START_TAG e o END_TAG.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Paso 3&amp;#039;&amp;#039;&amp;#039;: Neste intre, dependendo da flexibilidade que queiramos ter á hora de ler o arquivo, faremos o programa máis ou menos complexo.&lt;br /&gt;
&lt;br /&gt;
: A idea e ir lendo pola árbore e analizando cando chegamos a un principio de etiqueta (por exemplo &amp;lt;nome&amp;gt;) Nese intre temos que avanzar na árbore e obter o texto (Angel).&lt;br /&gt;
&lt;br /&gt;
: A variable &amp;#039;evento&amp;#039; pode valer (entre outros valores):&lt;br /&gt;
:* XmlPullParser.START_TAG; Comezo de etiqueta.&lt;br /&gt;
:* XmlPullParser.END_TAG: Fin de etiqueta.&lt;br /&gt;
:* XmlPullParser.TEXT: Texto&lt;br /&gt;
:* XmlPullParser.END_DOCUMENT: Fin de documento.&lt;br /&gt;
&lt;br /&gt;
:No caso que nos ocupa, se queremos ler esta parte do documento xml:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;contacto&amp;gt;&lt;br /&gt;
	    &amp;lt;nome&amp;gt;Angel&amp;lt;/nome&amp;gt;&lt;br /&gt;
	    &amp;lt;dir&amp;gt;C/ de Ala nº 12&amp;lt;/dir&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;fixo&amp;quot;&amp;gt;981111111&amp;lt;/tel&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;mobil&amp;quot;&amp;gt;691111111&amp;lt;/tel&amp;gt;&lt;br /&gt;
    &amp;lt;/contacto&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Unha posible forma de facelo sería:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
        		if (parser.getName().equals(&amp;quot;contacto&amp;quot;)) { 	// Un novo contacto&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;nome&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;NOME:&amp;quot; + parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;dir&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;DIR:&amp;quot; + parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;tel&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;Tel fixo:&amp;quot; + parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;tel&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;Tel móbil:&amp;quot; + parser.nextText());&lt;br /&gt;
        			&lt;br /&gt;
        		}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Fixarse como estamos a ler un único contacto. Si isto o poñemos dentro do while indicado anteriormente, no que lemos o documento ata que remate, leríamos todos dando como resultado:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
12-11 18:54:59.481: I/XML(14112): NOME:Angel&lt;br /&gt;
12-11 18:54:59.481: I/XML(14112): DIR:C/ de Ala nº 12&lt;br /&gt;
12-11 18:54:59.481: I/XML(14112): Tel fixo:981111111&lt;br /&gt;
12-11 18:54:59.481: I/XML(14112): Tel mobil:691111111&lt;br /&gt;
12-11 18:54:59.481: I/XML(14112): NOME:Luis&lt;br /&gt;
12-11 18:54:59.481: I/XML(14112): DIR:C/ de Acola nº 55&lt;br /&gt;
12-11 18:54:59.491: I/XML(14112): Tel fixo:982222222&lt;br /&gt;
12-11 18:54:59.491: I/XML(14112): Tel mobil:692222222&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Aquí entra en xogo o comentado anteriormente da flexibilidade. Esta forma de ler o documento funciona sempre que enviemos os datos de nome, dir, tel1, tel2, pero, que pasa se un ven sen teléfono móbil ? Ó analizar o arquivo xml daría un erro ou traeríamos datos erróneos.&lt;br /&gt;
&lt;br /&gt;
:Polo tanto teremos que ter en conta as posibilidades que poda traer o arquivo xml para realizar unha análise máis completa e complexa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Se queremos obter os atributos dentro dunha etiqueta teremos que facer uso do métodos:&lt;br /&gt;
:* getAtributeCount: Devolve o número de atributos&lt;br /&gt;
:* getAtributeName(int cont): Accede ó nome do atributo indicado por count.&lt;br /&gt;
:* getAtributeValue(int cont):  Obtemos o valor do atributo indicando por count.&lt;br /&gt;
&lt;br /&gt;
:No exemplo anterior, temos un atributo &amp;#039;tipo&amp;#039; na liña do teléfono:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;fixo&amp;quot;&amp;gt;981111111&amp;lt;/tel&amp;gt;&lt;br /&gt;
	    &amp;lt;tel tipo=&amp;quot;mobil&amp;quot;&amp;gt;691111111&amp;lt;/tel&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
: Unha forma de obter o valor deses atributos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;9,11&amp;quot; &amp;gt;&lt;br /&gt;
        	if(evento == XmlPullParser.START_TAG) {&lt;br /&gt;
        		if (parser.getName().equals(&amp;quot;contacto&amp;quot;)) { 	// Un novo contacto&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;nome&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;NOME:&amp;quot; + parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;dir&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;DIR:&amp;quot; + parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;tel&amp;gt;&lt;br /&gt;
        			// Estamos no tag &amp;lt;tel&amp;gt;=&amp;gt; obtemos o nome e valor do atributo tipo&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;Tel:&amp;quot; + parser.getAttributeName(0) + &amp;quot;--&amp;gt;&amp;quot; + parser.getAttributeValue(0)+&amp;quot;:&amp;quot;+parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;tel móbil&amp;gt;&lt;br /&gt;
        			Log.i(&amp;quot;XML&amp;quot;,&amp;quot;Tel:&amp;quot; + parser.getAttributeName(0) + &amp;quot;--&amp;gt;&amp;quot; + parser.getAttributeValue(0)+&amp;quot;:&amp;quot;+parser.nextText());&lt;br /&gt;
        			&lt;br /&gt;
        		}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Dando como resultado:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): NOME:Angel&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): DIR:C/ de Ala nº 12&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): Tel:tipo--&amp;gt;fixo:981111111&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): Tel:tipo--&amp;gt;mobil:691111111&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): NOME:Luis&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): DIR:C/ de Acola nº 55&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): Tel:tipo--&amp;gt;fixo:982222222&lt;br /&gt;
12-11 18:57:26.641: I/XML(14198): Tel:tipo--&amp;gt;mobil:692222222&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Caso práctico==&lt;br /&gt;
&lt;br /&gt;
O obxectivo desta práctica é ver un exemplo de procesamento dun arquivo XML.&lt;br /&gt;
&lt;br /&gt;
O arquivo terá de contido unha lista de contactos como vimos ó principio desta unidade. O que fará o activity será ler ese contido, pasar os datos lidos a obxectos dunha clase Contactos e amosará o contido do array de Contactos creados nun TextView.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_XML_1.jpg | 400px | center]]&lt;br /&gt;
&lt;br /&gt;
Por que introducimos o modelo de clases neste apartado ?&lt;br /&gt;
&lt;br /&gt;
Lembrar que isto xa o usamos na [http://manuais.iessanclemente.net/index.php/PDM_Avanzado_Datos_Bases_de_datos#Xuntando_todo_cos_Modelos unidade de bases de datos]. &lt;br /&gt;
&lt;br /&gt;
Normalmente os datos lidos dende un arquivo XML os imos querer gardar nunha base de datos. Como xa vimos como facelo utilizando clases que modelizan os datos, por iso o facemos así.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Preparación===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ud4_01_arquivo.xml]]: Gardade este arquivo (todo o nome con letras minúsculas) no cartafol /assets/ do voso proxecto Android.&lt;br /&gt;
&lt;br /&gt;
===Creamos a activity===&lt;br /&gt;
&lt;br /&gt;
*Nome do proxecto: &amp;#039;&amp;#039;&amp;#039;UD8_01_XML&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Nome da activity: &amp;#039;&amp;#039;&amp;#039;UD8_01_XML.java&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código do layout xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;RelativeLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:paddingBottom=&amp;quot;@dimen/activity_vertical_margin&amp;quot;&lt;br /&gt;
    android:paddingLeft=&amp;quot;@dimen/activity_horizontal_margin&amp;quot;&lt;br /&gt;
    android:paddingRight=&amp;quot;@dimen/activity_horizontal_margin&amp;quot;&lt;br /&gt;
    android:paddingTop=&amp;quot;@dimen/activity_vertical_margin&amp;quot;&lt;br /&gt;
    tools:context=&amp;quot;.UD8_01_XML&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:id=&amp;quot;@+id/UD8_01_txtDatos&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_centerHorizontal=&amp;quot;true&amp;quot;&lt;br /&gt;
        android:layout_centerVertical=&amp;quot;true&amp;quot;&lt;br /&gt;
        /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase UD8_01_XML&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Ler un arquivo XML e procesalo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;16,19-54,61,63-70&amp;quot; &amp;gt;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
&lt;br /&gt;
import org.xmlpull.v1.XmlPullParser;&lt;br /&gt;
import org.xmlpull.v1.XmlPullParserException;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.util.Xml;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
public class UD8_01_XML extends Activity {&lt;br /&gt;
	&lt;br /&gt;
	private ArrayList&amp;lt;Contacto&amp;gt;contactos = new ArrayList&amp;lt;Contacto&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	private void lerArquivo() throws IOException, XmlPullParserException {&lt;br /&gt;
	&lt;br /&gt;
		InputStream is = getAssets().open(&amp;quot;ud8_01_arquivo.xml&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		XmlPullParser parser = Xml.newPullParser();&lt;br /&gt;
                parser.setInput(is, &amp;quot;UTF-8&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
                int evento = parser.nextTag();&lt;br /&gt;
                Contacto contacto = null;&lt;br /&gt;
        &lt;br /&gt;
                while(evento != XmlPullParser.END_DOCUMENT) {&lt;br /&gt;
          	  if(evento == XmlPullParser.START_TAG) {&lt;br /&gt;
        		if (parser.getName().equals(&amp;quot;contacto&amp;quot;)) { 	// Un novo contacto&lt;br /&gt;
        			contacto = new Contacto();&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;nome&amp;gt;&lt;br /&gt;
            		  contacto.setNome(parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;dir&amp;gt;&lt;br /&gt;
            		  contacto.setDireccion(parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;tel&amp;gt;&lt;br /&gt;
            		  contacto.setTelefono_fixo(parser.nextText());&lt;br /&gt;
        			evento = parser.nextTag();	// Pasamos a &amp;lt;tel móbil&amp;gt;&lt;br /&gt;
            		  contacto.setTelefono_mobil(parser.nextText());&lt;br /&gt;
        		}&lt;br /&gt;
        	   }&lt;br /&gt;
        	   if(evento == XmlPullParser.END_TAG) {&lt;br /&gt;
        		if (parser.getName().equals(&amp;quot;contacto&amp;quot;)) { 	// Un novo contacto&lt;br /&gt;
        			contactos.add(contacto);&lt;br /&gt;
        		}&lt;br /&gt;
        	   }&lt;br /&gt;
        	        	&lt;br /&gt;
        	   evento = parser.next();&lt;br /&gt;
                 }&lt;br /&gt;
		&lt;br /&gt;
		 is.close();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_ud8_01__xml);&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			lerArquivo();&lt;br /&gt;
	                TextView caixa = (TextView)findViewById(R.id.UD8_01_txtDatos);&lt;br /&gt;
			for (Contacto contacto : contactos){&lt;br /&gt;
				&lt;br /&gt;
				caixa.append(&amp;quot;\nNOVO CONTACTO:&amp;quot;);&lt;br /&gt;
				caixa.append(contacto.getNome()+&amp;quot;\n&amp;quot;);&lt;br /&gt;
				caixa.append(contacto.getDireccion()+&amp;quot;\n&amp;quot;);&lt;br /&gt;
				caixa.append(&amp;quot;FIXO:&amp;quot; + contacto.getTelefono_fixo()+&amp;quot;\n&amp;quot;);&lt;br /&gt;
				caixa.append(&amp;quot;MOBIL:&amp;quot; + contacto.getTelefono_mobil()+&amp;quot;\n&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		} catch (IOException e) {&lt;br /&gt;
		         // TODO Auto-generated catch block&lt;br /&gt;
			e.printStackTrace();&lt;br /&gt;
			Toast.makeText(this, &amp;quot;ERRO:&amp;quot;+ e.getMessage(), Toast.LENGTH_LONG).show();&lt;br /&gt;
		} catch (XmlPullParserException e) {&lt;br /&gt;
			// TODO Auto-generated catch block&lt;br /&gt;
			e.printStackTrace();&lt;br /&gt;
			Toast.makeText(this, &amp;quot;ERRO:&amp;quot;+ e.getMessage(), Toast.LENGTH_LONG).show();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Liña 16: Definimos o array que vai gardar os contactos do arquivo XML.&lt;br /&gt;
* Liñas 19-54: Método que vai ler o arquivo XML e gardara no array anterior a lista de contactos.&lt;br /&gt;
:* Liña 32: Comprobamos se o inicio de etiqueta é &amp;lt;contacto&amp;gt;. Nese intre se crea un novo obxecto Contacto para engadir ó array.&lt;br /&gt;
:* Liñas 33-40: Lemos o contido do xml e imos enchendo o obxecto da clase Contacto creado previamente.&lt;br /&gt;
:* Liñas 44-45: Se atopamos o fin de etiqueta &amp;lt;/contacto&amp;gt; engadimos o novo contacto ó array.&lt;br /&gt;
&lt;br /&gt;
* Liña 61: Chamamos ó método que le o arquivo.&lt;br /&gt;
* Liñas 63-70: Percorremos o array de contactos e imos engadindo ó TextView os datos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Creamos a clase que vai modelizar os Contactos:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Contacto&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
public class Contacto {&lt;br /&gt;
	private String nome;&lt;br /&gt;
	private String direccion;&lt;br /&gt;
	private String telefono_fixo;&lt;br /&gt;
	private String telefono_mobil;&lt;br /&gt;
	&lt;br /&gt;
	public Contacto(String nome, String direccion, String tel_fixo, String tel_mobil){&lt;br /&gt;
		this.nome=nome;&lt;br /&gt;
		this.direccion=direccion;&lt;br /&gt;
		this.telefono_fixo=tel_fixo;&lt;br /&gt;
		this.telefono_mobil=tel_mobil;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public Contacto(){&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getNome() {&lt;br /&gt;
		return nome;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setNome(String nome) {&lt;br /&gt;
		this.nome = nome;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getDireccion() {&lt;br /&gt;
		return direccion;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setDireccion(String direccion) {&lt;br /&gt;
		this.direccion = direccion;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getTelefono_fixo() {&lt;br /&gt;
		return telefono_fixo;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setTelefono_fixo(String telefono_fixo) {&lt;br /&gt;
		this.telefono_fixo = telefono_fixo;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getTelefono_mobil() {&lt;br /&gt;
		return telefono_mobil;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setTelefono_mobil(String telefono_mobil) {&lt;br /&gt;
		this.telefono_mobil = telefono_mobil;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2014).&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>