Integrar Flash con XML

16th Mar 2010Actionscript, Flash, XML

AL momento de hacer aplicaciones interactivas con Flash, es posible utilizar una gran cantidad de métodos pero, sin duda, el más eficiente es el de leer la información a través de un archivo XML.

XML

Un archivo XML, es un documento muy simple y escrito en un formato estandarizado (muy similar al HTML). Para que se entienda más fácil, acá va un ejemplo de un XML simple:

<?xml version='1.0' encoding='iso-8859-1'?>
<datos>
	<banner>
		<swf>img/google.jpg</swf>
		<url>http://www.google.cl</url>
		<metodo>_blank</metodo>
	</banner>

	<banner>
		<swf>img/peivem.jpg</swf>
		<url>http://www.peivem.com</url>
		<metodo>_self</metodo>
	</banner>
</datos>

Flash

Por su parte, ActionScript (como muchos otros lenguajes de programación – prácticamente todos) posee comandos para importar archivos XML y leer su contenido.

La manera en que los lee no es “línea por línea”, como es el caso de los archivos de texto, sino que “nodo por nodo”, es decir por “padres e hijos”.

Para que se entienda como “piensa” flash, podríamos decir que (en el ejemplo anterior), el firstChild corresponde a la etiqueta . firstChild.childNodes[0] correspondería a la primera etiqueta , y el firstChild.childNodes[1], correspondería a la segunda etiqueta . Así mismo, se sigue hacia adentro, agregando más .childNodes[x].

Por lo tanto, la manera (copiar/pegar) de leer los datos de un xml en flash es la siguiente:

xml="xml/datos.xml";
var my_xml:XML = new XML ();
my_xml.ignoreWhite = true;
my_xml.load (xml);
my_xml.onLoad = parse;

function parse (succes):Void {
 	if (succes) { printScreen (this); }
 	else { trace ("Error"); }
}

function printScreen (xmlObj):Void {
 	var xmlNode:XMLNode = xmlObj.firstChild;
 	for (i=0;i<xmlNode.childNodes.length;i++){
 	swf = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
 	url = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
 	tgt = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;

	_root["swf_"+i]=swf;
 	_root["url_"+i]=url;
 	_root["tgt_"+i]=tgt;
 	banners++;
 	}
}

Un ejemplo práctico

Para los que saben un poco de ActionScript, está de más explicar el código anterior. Para los que no entienden nada de lo que dice, acá les dejo un ejemplo (.fla) con comentarios explicando cada función.

En este ejemplo, utilicé el mismo código (ActionScript 2.0) para hacer un flash que cargue, al azar, uno de entre todos los banners que se tengan configurados en el xml (siempre y cuando estén las fotos necesarias y el xml con la información).

Descargar ejemplo

1 Comment Comments Feed

  1. Daniel (08/11/2011, 13:49). Reply

    Hola, me parece estupendo este ejemplo. Pero fíjate que muestra undefined en el enlace. Que puedo hacer para resolverlo. También tengo otra duda al tener el swf residiendo en el mismo directorio que el xml y al invocarle embebido en un html porque no muestra las imágenes?

Add a Comment

Suscribirme a los siguientes comentarios vía email (también puedes suscribirte sin comentar.

Switch to our mobile site