Recorrer XML en AS3

Recorrer XML en AS3

Etiquetas: XML URLLoader URLRequest elements

El siguiente código carga un XML y recorre sus nodos y atributos imprimiendolos en pantalla.

El XML que he utilizado es el siguiente:

  1.  
  2. <Discos>
  3. 	<Disco puntuacion="10">
  4. 		<grupo id="20">The Knife</grupo>
  5. 		<titulo>Deep Cuts</titulo>
  6. 	</Disco>
  7. 	<Disco puntuacion="7">
  8. 		<grupo id="21">Jose Gonzalez</grupo>
  9. 		<titulo>Veneer</titulo>
  10. 	</Disco>
  11. </Discos>
  12.  

Y el código AS:


  1. //Importo las clases necesarias
  2. import flash.display.*;
  3. import flash.events.*;
  4. import flash.net.*;
  5.  
  6.  
  7. //Asigno la url que se va a cargar
  8. var url:String = "discos.xml";
  9. var XmlExterno:XML;
  10.  
  11. //Carga el XML
  12. function CargarXML() {
  13.         //Creo el objeto cargador
  14.         var loader:URLLoader = new URLLoader();
  15.         //Le añado los listeners
  16.         ponerListeners(loader);
  17.         //Creo el objeto que contendrá la petición
  18.         var peticion:URLRequest = new URLRequest(url);
  19.         //Cargo la petición
  20.         loader.load(peticion);
  21. }
  22.  
  23. //Añade los listeners al cargador
  24. function ponerListeners(dispatcher:IEventDispatcher):void {
  25.         dispatcher.addEventListener(Event.COMPLETE, completeHandler);
  26. }
  27.  
  28. //Funcion que se ejecuta cuando termina la descarga.
  29. function completeHandler(event:Event):void {
  30.  
  31. 	var cargador:URLLoader = event.target as URLLoader;
  32.     XmlExterno = new XML(cargador.data);
  33. 	for each(var nodo:XML in XmlExterno.elements()){
  34. 		//Devuelve el atributo puntuacion
  35. 		trace(nodo.@puntuacion);
  36. 		//Devuelve el contenido del nodo <grupo>
  37. 		trace(nodo.grupo);
  38. 		//Devuelve el valor del atributo id dentro del nodo <grupo>
  39. 		trace(nodo.grupo.@id);
  40. 		//Devuelve el contenido del nodo titulo
  41. 		trace(nodo.titulo);
  42. 	}
  43.  
  44. }
  45.  
  46. //Empezamos
  47. CargarXML();

Descargar archivos

Comentarios
    • Autor
    • David Moreno
    ¿Y si necesito saber el nombre del atributo o elemento?
    • Autor
    •  
    • Autor
    • Daniel
    me surgio la siguiente duda; ¿Como puedo saber el largo de los datos en Xml? ya que he intentado: XmlExterno.length(); pero siempre me devuelve 1 ojala me puedas ayudar saludos
    • Autor
    • esedeerre

    Hola Daniel, te pongo un ejemplo. En el ejemplo que yo tengo, para saber el numero de nodos "Disco", sería:

    XmlExterno.Disco.length();

    • Autor
    • Marito
    Excelente, muchas gracias!
    • Autor
    • Alejandro
    Amigo: Tu sabes si es posible organizar una lista de opciones en xml utilizando ac3? Mira te explico el ejemplo, si tengo una lista en abecedario y picho la "A" que me muestre un conjunto de opciones, como por ejemplo un video o imagen... Sabes algo de esto? saludos...
    • Autor
    • Franklin Martínez
    deseo crear un archivo xml, pero capturando los datos desde la interfaz, por ejemplo capturar id, nombre, apellidos, cantidad horas trabajadas, valor horas trabajadas, con un boton insertar, guardarlo en el archivo xml, lugo con un boton buscar obtener los datos de un empleado, poderlo modificar, o elimiar, recorrer el archivo xml y visualisarlo en um componente datagrid, o un reporte? espero su colaboración. gracias
    • Autor
    • Dionissio
    Necesito hacer lo mismo pero mi aplicacion en flash utiliza AS 1.0... Ayuda... como lo hago?
    • Autor
    • diego vargas
    simple, funciona ........ perfecto. muchas gracias
    • Autor
    • Elkin
    solo puedo decir una palabra. GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    • Autor
    • Pablo
    Grande !!! hay miles de tutos en la web pero no funca niguno, este anda de 10 gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    • Autor
    • edgar
    hola cuando uso el código en un frame funciona pero al pasar a otro frame utilizando textos dinámicos para recibir los datos sale: TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo. at menu_instructivo1_fla::MainTimeline/completeHandler() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete() y pierdo la lectura del xml agradezco si me puedes ayudar
    • Autor
    • Universidad de Cordoba
    Yo ya pude insertar datos en una estructura xml con actionscript, ademas pude hacer la busqueda de datos que la persona ingresaba en textinputs. y los buscaba en la estructura xml, ahora me falta la eliminacion y modificacion... quien puede decirme como accedo al indice del un Nodo en especifico en la estructura xml? espero su colaboracion gracias....
    • Autor
    • Adrian
    MIL Gracias, me has ayudado infinitamente!!!
    • Autor
    • MgCool
    Hola, gracias por tu aportación. Una duda, como puedo evaluar el valor de un nodo? Cree un XML con los registros que necesito de una tabla. Ahora de acuerdo a la sesion que elija el usuario necesito mostrar sus detalles... para esto quiero decirle a flash que mi variable "sesionseleccionada" sea la que debe encontrar en el XML... alguna idea? asi pues mi variable es: --VAR sesionseleccionada="g0GUgQ6iRW" --VAR i=0; /*Cómo le digo que recorra todo el XML y si el valor del nodo == sesionseleccionada, mande esos datos a un txt_detalle.text Mi XML se forma asi, por ejemplo:*/ g0GUgQ6iRW Interchanges Jan 26 2012 8:53AM Jan 26 2012 10:14AM 81 1 f8SLnZd2WT Interchanges Jan 26 2012 9:58AM Jan 26 2012 10:18AM 20 0 l3GW1jSKMY VacationCalculator Jan 26 2012 10:07AM Jan 26 2012 10:09AM 2 0 w1TNhNE17D Membership Jan 26 2012 10:13AM Jan 26 2012 10:14AM 1 0 f8SLnZd2WT VacationCalculator Jan 26 2012 10:18AM Jan 26 2012 10:18AM 0 0 f8SLnZd2WT VacationCalculator Jan 26 2012 10:18AM Jan 26 2012 10:18AM 0 0 t0BHmMAqxD VacationCalculator Jan 26 2012 10:38AM Jan 26 2012 10:40AM 2 1 k2DF7ljPWn VacationCalculator Jan 26 2012 10:44AM Jan 26 2012 10:47AM 3 0 Tal vez dentro de un ciclo for each, pero no he podido:P for each (var nodo:XML in respuestaXML.elements()){ if(detalleXML.elements("sesion")[i].toString()==sesionseleccionada{ txt_detalle.text=detalleXML.elements("Descripcion")[i].toString() } } Cabe mencionar que puede haber varios nodos (registros) con ese mismo valor de sesion, por lo que también se concatenarían en el txt_detalle.text. Gracias por su ayuda. Saludos
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: