Recorrer XML en AS3
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 3 4 5 6 7 8 9 10 11 12 |
<Discos> <Disco puntuacion="10"> <grupo id="20">The Knife</grupo> <titulo>Deep Cuts</titulo> </Disco> <Disco puntuacion="7"> <grupo id="21">Jose Gonzalez</grupo> <titulo>Veneer</titulo> </Disco> </Discos> |
Y el código AS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//Importo las clases necesarias import flash.display.*; import flash.events.*; import flash.net.*; //Asigno la url que se va a cargar var url:String = "discos.xml"; var XmlExterno:XML; //Carga el XML function CargarXML() { //Creo el objeto cargador var loader:URLLoader = new URLLoader(); //Le añado los listeners ponerListeners(loader); //Creo el objeto que contendrá la petición var peticion:URLRequest = new URLRequest(url); //Cargo la petición loader.load(peticion); } //Añade los listeners al cargador function ponerListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, completeHandler); } //Funcion que se ejecuta cuando termina la descarga. function completeHandler(event:Event):void { var cargador:URLLoader = event.target as URLLoader; XmlExterno = new XML(cargador.data); for each(var nodo:XML in XmlExterno.elements()){ //Devuelve el atributo puntuacion trace(nodo.@puntuacion); //Devuelve el contenido del nodo <grupo> trace(nodo.grupo); //Devuelve el valor del atributo id dentro del nodo <grupo> trace(nodo.grupo.@id); //Devuelve el contenido del nodo titulo trace(nodo.titulo); } } //Empezamos CargarXML(); |
COMENTARIOS
¿Y si necesito saber el nombre del atributo o elemento?
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
Hola Daniel, te pongo un ejemplo. En el ejemplo que yo tengo, para saber el numero de nodos «Disco», sería:
XmlExterno.Disco.length();
Excelente, muchas gracias!
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…
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
simple, funciona …….. perfecto. muchas gracias
Necesito hacer lo mismo pero mi aplicacion en flash utiliza AS 1.0… Ayuda… como lo hago?
solo puedo decir una palabra.
GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Grande !!! hay miles de tutos en la web pero no funca niguno, este anda de 10 gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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….
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
MIL Gracias, me has ayudado infinitamente!!!
Hola, gracias por tu aportación. Una duda, como puedo evaluar el valor de un nodo?
== sesionseleccionada, mande esos datos a un txt_detalle.text
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
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
< ?xml version="1.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
No me sirve, me salen errores
DEJA TU COMENTARIO