XML en ActionScript
Estoy rompiendome la cabeza con el XML en flash de forma eficiente.
Por lo que veo, si quieres acceder a la información almacenada en cada nodo XML, no te queda mas remedio que:
1-Saber de memoria la posición que cada subnodo tiene en la jerarquia, para acceder con "nodo.childNodes[i]" y confiar en que esas posiciones se mantengan Ad perpetuam (mala idea).
2-Meter toda la información en atributos en lugar de subnodos, destruyendo parcialmente la jerarquia. Resulta rapido, pero mas dificil de mantener.
3-Recorrer cada nodo y subnodo, mirando si su atributo "nodeName" se corresponde con lo que buscas. Bastante ineficiente.
¿No hay alguna función ya hecha que permita indexar los nodos por su nombre?
jakobuslandson
Tras una pausa para relajar las neuronas, encontré una posible solucion:
wddx
Como flash no es un estandar w3c, supuse directamente que no habria implementaciones de wddx para actionscript, pero parece ser que unos tales Branden Hall y Dave Gallerizzo lo han hecho.
Podeis bajarlo aqui:
http://ipt.byu.edu/~merrillp/ipt760/ElectroServer/wddx_mx.as
Mañana lo probaré ¿alguien lo conoce ya?¿que tal va?
Ventd'Aval
Tambien tienes XPath:
http://www.xfactorstudio.com/
Saludos...
elSuricatoRojo
Yo no se como lo hará otra gente per yo lo hago así:
1) No utilizo XPATH
2) Tengo 1 clase "XML2" con 3 métodos estáticos:
static function posicionSubnodo(nodo:XMLNode, nombreSubNodo:String):Number
//Que te devuelve la posición de un nodo determinado dentro de otro para evitar que si se cambia el orden de los nodos te corrompan los datos... vamos para conseguir que dé igual:
<code>
<nodo>
<subnodo1/>
<subnodo2/>
</nodo>
</code>
..que:
<code>
<nodo>
<subnodo2/>
<subnodo1/>
</nodo>
</code>
static function extraerValorNodo(nodo:XMLNode, nombreSubNodo:String):String
// Que dado un nodo te extrae el valor (nodeValue) de un subnodo
static function extraerAtributoNodo(nodo:XMLNode, nombreSubNodo:String, atributo:String):String
// Que dado un nodo extrae el valor de un atributo de uno de sus subnodos
3) Creo una clase para cada modelo de XML de tal forma que la parsee y la parseo 1 sola vez (a no ser que requiera una actualización) y almaceno los datos en un Object. La clase que parsea el XML es responsable de habilitar métodos que faciliten el acceso a la información.
4) Me va mu bien :-) No he tecleado un "firstChild.firstChild" o un "nodo.childNodes[i]" desde hace 2 años.
kassel
Me parecen muy buenos en principio ambos, los voy a estudiar en cuanto pueda, y aver si puedo sacar algo en limpio para ocmpartir.