Los eventos onLoad, onData de los objetos XML y LoadVars han dejado de existir en esta nueva versión de AS3.
Así mismo el método load de las mismas ahora debemos utilizar la clase URLLoader en conjunto con la clase URLRequest.
Algo así.
[as]
import flash.net. *
var url:URLRequest = new URLRequest (“miXml.xml”);
var loadUrl:URLLoader = new URLLoader (url)
loadUrl.load (url);
[/as]
En la sgunda linea creamos un “peticion de URL†en este caso un XML, en la linea tres creamos un “cargador de URL†pasandole como parámetro la variable que contiene el URL de petición, por ultimo solo basta cargar dicha url.
Ok, y como se cuendo el xml esta cargado?
Para ello recurrimos a nuestro addEventListener :),
[as]
import flash.net. *
import flash.event. *
var url:URLRequest = new URLRequest (“miXml.xml”);
var loadUrl:URLLoader = new URLLoader (url)
loadUrl.load (url);
loadUrl.addEventListener (Event.COMPLETE, onComplete);
function onComplete (event : Event) : void
{
trace(event)
}
[/as]
Hasta aqui no se tan complicado cierto?
Bien, ahora como parseamos este XML?. Una vez que se dispara el evento COMPLETE la información recibida se almacena en el objeto URLLoader, en este caso “loadUrl†y debemos hacer referencia a el de esta forma
[as]
import flash.net. *
import flash.event. *
var url:URLRequest = new URLRequest (“miXml.xml”);
var loadUrl:URLLoader = new URLLoader (url)
loadUrl.load (url);
loadUrl.addEventListener (Event.COMPLETE, onComplete);
function onComplete (event : Event) : void
{
//Hacemos referencia al objeto que lanzo el Evento
//Que es el mismo que contiene la información
var loadUrl : URLLoader = URLLoader (event.target);
//Creamos un nuevo objeto XMLDocument, que remplaza al XML tradicional que conocíamos
var xmlDoc : XMLDocument = new XMLDocument ()
//Ignoramos los espacios en Blanco del XML
xmlDoc.ignoreWhite = true
//Y por ultimo parseamos la información para poder acceder a ella por los métodos ya conocidos
//firstChilds, childNodes etc etc
xmlDoc.parseXML (loadUrl.data);
}
[/as]
Ahora, una cosa que me encontré por ahí leyendo la referencia de AS3 es esto
[as]
for each
[/as]
Si AS3 ya tiene un for each.. 😀 gracias gracias…. jeje..
bien una vez que parseamos nuestro XML solo queda recorrer los nodos y sacar la info.
El XML que usaremos de ejemplo es este:
<items> <item id="1" label="Uno"/> <item id="2" label="Dos"/> <item id="3" label="Tres"/> </items>
y el codigo completo para parsearlo es :
[as]
import flash.net. *
import flash.event. *
var url : URLRequest;
var loadUrl : URLLoader;
var theUrl : String = “myXml.xml”;
var outPut = new TextField ();
function init () : void
{
doTextField ();
url = new URLRequest (theUrl);
loadUrl = new URLLoader (url)
loadUrl.load (url);
loadUrl.addEventListener (Event.COMPLETE, onComplete);
loadUrl.addEventListener (SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
loadUrl.addEventListener (HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
loadUrl.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler);
}
function doTextField () : void
{
addChild (outPut)
outPut.width = stage.stageWidth
outPut.height = stage.stageHeight
outPut.multiline = true
outPut.text = “Loadind XML..”;
}
function onComplete (event : Event) : void
{
var loadUrl : URLLoader = URLLoader (event.target);
var xmlDoc : XMLDocument = new XMLDocument ()
xmlDoc.ignoreWhite = true
xmlDoc.parseXML (loadUrl.data);
var nodes = xmlDoc.firstChild.childNodes
outPut.text = “”;
for each (value in nodes)
{
outPut.text += “nid: ” + value.attributes.id
outPut.text += “nlabel: ” + value.attributes.label
outPut.text += “n———————————”
}
}
function securityErrorHandler (event : SecurityErrorEvent) : void
{
trace (“securityErrorHandler: ” + event);
}
function httpStatusHandler (event : HTTPStatusEvent) : void
{
trace (“httpStatusHandler: ” + event);
}
function ioErrorHandler (event : IOErrorEvent) : void
{
trace (“ioErrorHandler: ” + event);
}
init ()
[/as]
Como se pueden dar cuenta tenemos acceso a varios eventos :
Event.COMPLETE
SecurityErrorEvent.SECURITY_ERROR
HTTPStatusEvent.HTTP_STATUS
IOErrorEvent.IO_ERROR
Entre muchos otros que nos pueden ayudar a depurar de manera mas eficaz nuestras aplicaciones
Bueno eso es todo por hoy. Como siempre aquí esta el FLA
Solamente gracias! muchas gracias
Hola, interesante el proceso. Pero se puede hacer a la inversa?
Que de flash yo pueda guardar via xml en un documento en word y que se quede almacenado en una carpeta o ruta asignada.
Saludos.
Hola es muy interesante y util el articulo.
Me interesa obtener datos de una BD a travez de java, Como puedo hacer esto???, he leido hacerca de openAMF tambien serviria en este caso??
Muchas gracias!! Muy bien explicado además! 😉
falta esto
import flash.xml.XMLDocument;
genial tutorete!!
otra mas que se me ocurre para sacar el error del for each, que dice que value no existe como propiedad es esto :
var nodes = xmlDoc.firstChild.childNodes;
nodes.forEach (MostrarDato);
function MostrarDato (item:*, index:int, array:Array):void {
outPut.text += “nid: ” + item.attributes.id;
outPut.text += “nlabel: ” + item.attributes.label;
outPut.text += “n———————————“;
}
saludos
gracias