flash 8 + ids de xml.

La utilización de atributos id en los xml, facilta el manejo de la infomación de estos, de echo facilitaba tanto la el acceso a la información dentro del xml, que casi se podía considerar una buena práctica utilizar nodos con identíficadores únicos, pero algunas cosas han cambiado desde el flash7.

Versión larga.

supongamos que tenemos un xml.
datos.xml
[code]









[/code]

flash 7 reconocía los ids autmáticamente, asi que para saber la descripción de un nodo específico habia que hacer algo como esto.

[code]ObjXML['idNodo'].toString();[/code]
o
[code]ObjXML['idNodo'].attibutes.nombre);[/code]

así, no teniamos que ir recorriendo el xml, buscando un nodo específico, para saber el índice de este y obtener los datos, es decir, convertir el xml casi que en un arreglo de lista.

(publicar como flash7)
[code]
var el:XML = new XML ();
el.ignoreWhite = true;
function parse(s:Boolean):Void{
if(s){
trace(this['p_02'].toString());
}
}
el.onLoad = parse;
el.load("datos.xml");
[/code]

La sorpresa vino, cuando este tipo de acceso a xml dejó de funcionar cuando abrí un fla en flash 8.
El alivio vino luego de sumergirme en la documentación del objeto xml para esta versión (obviamente, luego del "qué putas cambiaron ahora???")
sucede que en esta version se hace un mapa de los ids referenciando los origales y guardando esta referencia en un objeto "idMap", del xml.
(pubicar como fp8)
[code]
var el:XML = new XML ();
el.ignoreWhite = true;
function parse(s:Boolean):Void{
if(s){
for(var n in this.idMap){
trace(n + " " + this.idMap[n].attributes.nombre);
}
}
}
el.onLoad = parse;
el.load("datos.xml");
[/code]
es decir para hacer lo que hacíamos antes, nada más tenemos que ir a bucar nuestra información dentro del objeto idMap.
[code]
var el:XML = new XML ();
el.ignoreWhite = true;
function parse(s:Boolean):Void{
if(s){
trace(this.idMap['p_02'].toString());
}
}
el.onLoad = parse;
el.load("datos.xml");
[/code]

Versión corta.

  • El acceso a la información con nodos con identificador único ya no se hace directamente, ahora se acceden a ellos mediante el objeto idMap dentro el mismo XML.
  • Si se quiere hacer otro xml que contengan estos ids se puede hacer con la función parseXML
    [code]nuevoXML.parseXML(viejoXML);[/code]
  • Hay un proverbio antiguo muy famoso, que por lo general aplica a programación.
    Si funciona: no lo toques, que la puedes c*gar.

1 Comments

sergiomas said:

Desconocía que flash7 podía reconocer un id de esa manera. No se me pasó por la cabeza.

Gracias.

Un recurso interesante para trastear con un XML es el componente que desarrolla Arul.

http://www.shockwave-india.com/blog/?archive=2005_07_10_archive.xml

Para el que no lo conozca.

Saludos