Página inicial  

trans_770 trans_160

Unidad 20. ActionScript - Formularios (IV).


Recuperando información

 

En puntos anteriores vimos cómo utilizar el objeto LoadVars para leer información de archivos externos. En este apartado veremos cómo recuperar información de un archivo XML.

Para ello y el primer paso será crear un objeto del tipo XML:

var comentarios:XML = new XML();

Hemos creado un objeto XML llamado comentarios. Ahora podremos utilizarlo para leer un archivo XML y tomar la información contenida en él.

 

Una propiedad muy útil del objeto XML es la de ignoreWhite, que ignorará aquellos campos que estén en blanco y así no tendremos que preocuparnos por posibles errores:

comentarios.ignoreWhite = true;

 

El groso del código que hemos añadido para cargar los datos es el siguiente:

comentarios.onLoad = function(exito:Boolean) {

	if (exito) {

		comentarios_txt.text = "";

		

		var numeroEntradas = this.firstChild.childNodes.length;

		// hacemos un bucle para recorrer todos los elementos del archivo XML

		for (var i = numeroEntradas-1; i>=0; i--) {

			// guardamos en la variable miXML la ruta del nodo

			var miXML:XMLNode = this.firstChild.childNodes[i];



			// guardamos el contenido del nodo

			var autor:String = miXML.childNodes[0].firstChild.nodeValue;

			var email:String = miXML.childNodes[1].firstChild.nodeValue;

			var mensaje:String = miXML.childNodes[2].firstChild.nodeValue;

			

			// creamos la variable cadenaFinal donde insertaremos el contenido html que tendrá salida en el cuadro de texto

			var cadenaFinal:String;

			

			// y cargamos el contenido del nodo en cadenaFinal			

			cadenaFinal = "<a href=\"mailto:"+email+"\">"+autor+"</a>: ";

			cadenaFinal += "<span class=\"mensaje\">"+mensaje+"</span><br />";

			

			// añadimos el contenido de cadenaFinal en la caja de texto

			comentarios_txt.text += cadenaFinal;

			

			// y repetimos el bucle

		}		

	} else {

		comentarios_txt.text = "No se pudieron cargar los datos";

	}

}



comentarios.load("lee_comentarios.php");

 

Ahora explicaremos paso a paso qué hemos hecho.

Como puedes ver en la última línea cargamos un script php que genera un documento XML en el objeto comentarios.

Al cargarlo se ejecuta el controlador onLoad que está definido al principio.

Si la carga tuvo éxito, procedemos a coger la información del archivo XML generado. Lo primero que hacemos es vaciar el contenido del área de texto comentarios_txt.

comentarios_txt.text = "";

 

Luego pasamos a trabajar con el contenido del archivo XML.

Un archivo XML tiene la estructura muy similar a un archivo HTML, ya que también está basado en etiquetas. El contenido de nuestro archivo es algo parecido a esto:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<listadoComentarios>

	<comentario>

		<autor>josé</autor>

		<email>jose@correo.com</email>

		<mensaje>estoy escribiendo un mensaje</mensaje>

	</comentario>

	<comentario>

		<autor>amparo</autor>

		<email>amparo@correo.com</email>

		<mensaje>este mensaje también se publicará</mensaje>

	</comentario>

	<comentario>

		<autor>miguel</autor>

		<email>miguel@correo.com</email>

		<mensaje>mensaje de prueba</mensaje>

	</comentario>

	<comentario>

		<autor>cristina</autor>

		<email>cristina@correo.com</email>

		<mensaje>esto funciona!</mensaje>

	</comentario>

</listadoComentarios>

A cada una de las etiquetas (sin contar la de xml) se le llama nodo.

 

Para navegar por los nodos a través del objeto XML utilizaremos las propiedades firstChild (que referencia la etiqueta contenida inmediatamente después de aquella en la que nos encontramos) y childNodes (que hace referencia al conjunto de nodos con el mismo nombre dentro de la etiqueta en la que nos encontramos).

De esta forma XML.firstChild.nodeName nos devolvería el nombre del primer hijo dentro del archivo XML, listadoComentarios.

Así que almacenamos el número de comentarios en la variable numeroEntradas escribiendo:

var numeroEntradas = this.firstChild.childNodes.length;

Esto nos devolverá el número de hijos de this.firstChild, o lo que es lo mismo de XML.firstChild.

Una vez sepamos cuantas entradas tenemos almacenadas, haremos un bucle para sacarlas todas. Este bucle lo empezaremos desde el final para tener así las entradas más recientes al principio y las más antiguas al final.

 

Ahora crearemos una nueva variable llamada miXML que contendrá la ruta completa del nodo comentario para cada una de las vueltas del bucle, así no tendremos que escribirla entera cada vez que queramos acceder a ella.

var miXML:XMLNode = this.firstChild.childNodes[i];

De esta forma estamos haciendo referencia al comentario número i del archivo.

Ahora lo único que debemos hacer es recuperar la información dentro del nodo comentario.

Como este nodo tiene tres hijos con distinto nombre haremos referencia a ellos como miXML.childNodes[0], miXML.childNodes[1] y miXML.childNodes[2].

 

Una vez hallamos comprendido bien estos conceptos sólo hará falta verter el contenido de los nodos (utilizando la propiedad nodeValue) en variables que crearemos a su efecto:

var autor:String = miXML.childNodes[0].firstChild.nodeValue;

var email:String = miXML.childNodes[1].firstChild.nodeValue;

var mensaje:String = miXML.childNodes[2].firstChild.nodeValue;

Una vez tengamos la información podemos almacenarla y pasar al siguiente nodo comentario. Así que le damos formato HTML, lo almacenamos en una variable, y metemos el contenido de esa variable en el área de texto.

var cadenaFinal:String;

				

cadenaFinal = "<a href=\"mailto:"+email+"\">"+autor+"</a>: ";

cadenaFinal += "<span class=\"mensaje\">"+mensaje+"</span><br />";



comentarios_txt.text += cadenaFinal;

El bucle se repetirá de este modo para cada uno de los nodos comentarios y cuando termine habremos acabado y toda la información contenida en el archivo XML estará (formateada como HTML) en el área de texto.



     


© aulaClic. Todos los derechos reservados. Free Computer tutorials. Prohibida la reproducción por cualquier medio.
Septiembre - 2007.