Comunidad de diseño web y desarrollo en internet online

AS2 a AS3: XMLDocument y XMLNodes

Citar            
MensajeEscrito el 16 Dic 2007 04:28 pm
Saludos,

desde que he cambiado a AS3 he notado un fallo importante (que creo yo que es un fallo, dudo que este hecho intencionadamente) en los objetos XML, me explico:

Ahora para cargar un objeto XML (cuya funcionalidad se ha trasladado a XMLDocument), se utiliza parseXML(...), y de ahi obtienes el primer nodo de XMLDocument con "firstChild" (como antes), que te devuelve un XMLNode.

Pues bien, ese XMLNode, que por ejemplo corresponde al objeto:
<elemento nombre='asdf' valor1='61.75' />

tendra unos atributos "nombre" y "valor1".

El problema viene al recorrer esos atributos y meterlos en un array, que no lo hace ordenadamente, sino que los coloca donde le sale de las narices (incluso de distintas maneras en dos ejecuciones del programa para los mismos datos de entrada). Por ejemplo:

for (var i=0;i<nodo.childNodes.length;i++)
{
miArray[i] = (nodo.childNodes[i].attributes);
}

De esta manera, al estar mal colocadas las columnas en el array, si el array se pone como dataProvider de un DataGrid, las columnas salen tambien mal colocadas.

Mirando el depurador, viendo los atributos de childNodes, unas veces los atributos tienen un orden y a la siguiente depuracion tienen otro...muy muy extraño.

Independientemente de que sea un fallo o no, ¿alguien puede darme una solucion alternativa a esto?

Gracias.

Por Ithaz

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Dic 2007 06:34 pm
Y si haces:

Código :

        XmlExterno = new XML(cargador.data);
        for each(var nodo:XML in XmlExterno.elements()){

                trace(nodo.@nombre);
                trace(nodo.@valor);

        }


???

Por db

63 de clabLevel



 

opera
Citar            
MensajeEscrito el 16 Dic 2007 08:10 pm
Gracias por la respuesta, ante todo.

Conseguir acceso a los atributos ya lo hacia, aun asi nunca esta de menos conocer un nuevo metodo (supongo que esa es la forma de acceder "a la vieja usanza"). En cualquier caso, no me vale, porque resulta que teniendo el array con los atributos colocado igualmente no consigo la finalidad, que es hacer un data provider de un array, para aplicarselo a un DataGrid, es decir, que con el array obtenido ordenado, creo un DataProvider y se lo asigno al DataGrid, y aun asi me coloca las columnas como quiere...esto es mas raro que hacerselo con un rayador de queso.

Por otra parte, lo que pretendia tambien era no tener que conocer el numero de atributos del XML para pasarselo al array, porque el XML en mi caso no siempre va a ser el mismo numero de atributos.

Seguire buscando informacion, ahora del DataProvider, a ver si encuentro una solucion buena.

Por Ithaz

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Dic 2007 08:47 pm
¿Hay alguna manera de obtener el nombre de los atributos de un nodo? De esta manera me crearia dinámicamente tantas columnas como atributos hubiese, y podria colocarlas en cierto orden...

Por Ithaz

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Dic 2007 09:22 pm
Ok, ya esta, sacando los atributos de un nodo de esata manera:

Código :

var nombresAtributos:XMLList = XML(nodo.childNodes[i]).@*;
for (var columna:int = 0; columna < nombresAtributos.length(); columna++)
{
    trace(nombresAtributos[columna].name());
}


obtienes el nombre de los atributos.

Aunque sigo pensando que era bastante mejor en AS2, le pasabas al DataProvider un array, cuyos datos se leyeron de un XML y te los sacaba en el DataGrid con el mismo orden que el XML sin tener que estar quebrandote la cabeza. Ahora, si tu lees un XML los atributos no salen ordenados desde el primer momento.

Por Ithaz

2 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.