Foros del Web » Creando para Internet » Flash y Actionscript »

xml a array:object

Estas en el tema de xml a array:object en el foro de Flash y Actionscript en Foros del Web. Hola :°( tengo un problema: Resulta que estoy trayendo datos de un xml y los intento meter en un array, si carga los datos de ...
  #1 (permalink)  
Antiguo 03/02/2006, 12:55
Avatar de PumasCampeon  
Fecha de Ingreso: junio-2004
Ubicación: @gs.mx
Mensajes: 240
Antigüedad: 13 años, 6 meses
Puntos: 0
xml a array:object

Hola :°( tengo un problema: Resulta que estoy trayendo datos de un xml y los intento meter en un array, si carga los datos de mi file.xml y dentro de algunas functions hago el paso para vaciarlos en el vector pero no los mete:

// que me falta aqui:
Código:
var numEdecanes = 0;		//Se lee del XML
// var arrayEdecanes = new Array ();
var todasLasEdecanes = new Array();//Vector para guardar edecanes del XML
/**************************************************************/
var myXML = new XML();		//Objeto XML
myXML.load("edecanes.xml");//Lee archivo XML
myXML.ignoreWhite = true;	//ingnora los espacios del xml entre un campo y otro.
myXML.onLoad = loadedXML;	//Al terminar, ejecuta funcion
/**************************************************************/
function laEdecan(p1, p2, p3, p4, p5, p6) {
	this.numero = p1;	//Numero de edecan
	this.texto = p2;	//Nombre de edecan
	this.op1 = p3;		//Opcion 1
	this.op2 = p4;		//Opcion 2
	this.op3 = p5;		//Opcion 3
	//this.correcto = p6;	//Opcion correcta
	this.tema = p6		//Categoria de edecan
	this.ya = 0;		//0 no ha sido vista, 1 ya fue vista
	trace ('laEdecan: '+this.texto)
}
/**************************************************************/
function loadedXML() {
	allText = myXML.firstChild;				//Lee todo el archivo
	a = allText.firstChild;					//Lee el primer nodo
	arrayEdecanes = allText.childNodes;	//Hace el array de edecanes, Total final num: ...27
	numEdecanes = arrayEdecanes.length;	//Evalua el no de edec. en el archivo, ...27
	for (var i = 0; i<numEdecanes; i++) {
		Edecan = a.childNodes;		//Genera Vector y vacia variables
		num = parseInt(Edecan[0].firstChild.toString());
		tex = Edecan[1].firstChild.toString();
		op1 = Edecan[2].firstChild.toString();
		op2 = Edecan[3].firstChild.toString();
		op3 = Edecan[4].firstChild.toString();
		tm = parseInt(Edecan[5].firstChild.toString());
		/* --> AQUI ESTA EL PROBLEM <-- */
		// no mete las variables al Array !!!
		todasLasEdecanes[i] = new laEdecan(num, tex, op1, op2, op3,tm);
		a = a.nextSibling;		//Lee Proximo nodo
	}
}
// no traza nada
trace (todasLasEdecanes.length)
.... Un alma carita-tiva graXs!
__________________
lo que se es una gota de lluvia, comparado con tu inmenso mar :-)
  #2 (permalink)  
Antiguo 03/02/2006, 13:32
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 12 años, 9 meses
Puntos: 0
no veo el objeto por ningún lado
está un tanto confuso xD
con asignaciones innecesarias...

yo lo haría así
archivo: el_xml.xml
Código HTML:
<?xml version="1.0" encoding="UTF-8"?>
<raiz>
	<nodo numero="1" nombre="Carlos" texto="Texto número uno" />
	<nodo numero="2" nombre="Pepe" texto="Texto número dos" />
	<nodo numero="3" nombre="Lucho" texto="Texto número tres" />
	<nodo numero="4" nombre="Marcos" texto="Texto número cuatro" />
	<nodo numero="5" nombre="Juan" texto="Texto número cinco" />
	<nodo numero="6" nombre="Pablo" texto="Texto número seis" />
	<nodo numero="7" nombre="Julio" texto="Texto número siete" />
	<nodo numero="8" nombre="Mirian" texto="Texto número ocho" />
	<nodo numero="9" nombre="Valeria" texto="Texto número nueve" />
	<nodo numero="10" nombre="Yoni" texto="Texto número diez" />
</padre> 
y desde flash:
Código:
//--------------------->
var losDatos_xml:XML = new XML();
losDatos_xml.ignoreWhite = true;
losDatos_xml.onLoad = function(exito){
	if(exito) rellenar_losDatos_array(this.firstChild.childNodes);
	else trace('NO SE PUDO CARGAR LOS DATOS!!!');
}
//el array que contendrá los registros -------------------->
var losDatos_array:Array = new Array();

// la funcion que se encargar de llenar los datos en el array -------------------->
//recibe como parámetro la lista de hijos nodos
function rellenar_losDatos_array(lista:Array){
	for(n=0;n<lista.length;n++){
		//aquí creamos un objeto: registro y le damos sus propiedades
		var registro:Object = new Object();
		registro.numero= lista[n].attributes.numero;
		registro.nombre = lista[n].attributes.nombre;
		registro.texto = lista[n].attributes.texto;
		//aquí agregamos el objeto al array
		losDatos_array.push(registro);
	}
}
// cargamos los datos ------------------->
losDatos_xml.load('el_xml.xml');

// para verificar :D -------------->
this.onMouseUp = function(){
	for(i in losDatos_array)  {
		for(q in losDatos_array[i]) trace(q+' -> '+losDatos_array[i][q]);
		trace('--------------------------------------------------------------');
	}
	trace('--------------------------------------------------------------');
	trace('TOTAL: '+losDatos_array.length+' elementos.');
}
stop();
:D
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #3 (permalink)  
Antiguo 03/02/2006, 14:19
Avatar de PumasCampeon  
Fecha de Ingreso: junio-2004
Ubicación: @gs.mx
Mensajes: 240
Antigüedad: 13 años, 6 meses
Puntos: 0
Gracias me sirve mucho, una pregunta de Xml: si quiero clasificar por temas o algo asi necesito usar un id en al go asi:
Código:
  <encabezado id="Edecan">
    <submenu id="Nombre de persona N" estatura="1.80 m" detalles="pelo negro, ojos verdes"></submenu>
    <submenu id="Laisha N" estatura="N mts" detalles="castaño oscuro"></submenu>
    <submenu id="Otro" estatura="N mts" detalles="ojos claros"></submenu>
  </encabezado>
CÓmo, al momento de clasificar el tema los encuentro en el array?. Por ej si encabezado id=Edecán, otro id=Modelo, etc, como encontrar a los que son solo edecan

con firstChild.attributes.id dentro de un for (bucle) traigo de Edecan,
y con childNodes.attributes las caract de cada nodo

no se si este bien este intento, asi lo hago pero me falta algo porque no los clasifica
__________________
lo que se es una gota de lluvia, comparado con tu inmenso mar :-)
  #4 (permalink)  
Antiguo 03/02/2006, 15:44
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 12 años, 9 meses
Puntos: 0
creo que esto aclará tus dudas (espero) xD

http://www.kadazuro.com/blog/archives/000093.php

:D
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #5 (permalink)  
Antiguo 03/02/2006, 15:54
Avatar de PumasCampeon  
Fecha de Ingreso: junio-2004
Ubicación: @gs.mx
Mensajes: 240
Antigüedad: 13 años, 6 meses
Puntos: 0
Gracias amigo, hoy aprendi algo nuevo.....
__________________
lo que se es una gota de lluvia, comparado con tu inmenso mar :-)
  #6 (permalink)  
Antiguo 07/02/2006, 09:32
Avatar de PumasCampeon  
Fecha de Ingreso: junio-2004
Ubicación: @gs.mx
Mensajes: 240
Antigüedad: 13 años, 6 meses
Puntos: 0
Xml medio carga (incompleto)

Hola, he hecho esta rutina para cargar los datos de xml y todo lo hace bien mientras lo veo desde el flash player pero cuando estoy en el html desde ahi el swf carga algunos nodos del xml incompletos. Pareciera que los acentos y las ñ

En flash ya uso System.useCode... true para acentos y caracteres. No se si en el Xml deba ir algo, al menos tiene al inicio xml=1.0 y utf-8

Por que me cargara los datos incompletos de los nodos. Hay un limite de atributos para cada nodo? (nodo id='algo' num='2' etiq='otro' etc... /)
__________________
lo que se es una gota de lluvia, comparado con tu inmenso mar :-)
  #7 (permalink)  
Antiguo 07/02/2006, 14:58
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
System.useCodepage pasalo a false; de esta manera, obligás al flash a interpretar lo que le llega como Unicode. Ahora, tendrías que asegurarte de que lo que estás enviando es efectivamente Unicode. Si el xml es estático (o sea, es un .xml), fijate con qué programa lo estás editando. El notepad, por ej, te da la opción de grabarlo con distintas codificaciones, pero la que toma por defecto es ANSI. Deberías grabarlo como utf-8.

Si lo estás generando dinámicamente, con php, por ej, fijate de especificar en los headers que es xml y que es utf-8.

Chequeá eso y fijate si eso arregla el problema o modifica algo.


Suerte
Califa
header("Content-type:text/xml; charset=utf-8");
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:55.