Hasta ahora hemos mostrado datos de un archivo XML, vamos manejarlos en una pelicula sencilla de distribucion en cuadros de texto:
Tenemos este documento xml:
<flashpro>
<usuario nacion="Mexico">Alesys</usuario>
<usuario nacion="Costa Rica">Kadazuro</usuario>
<usuario nacion="España">Dani</usuario>
<usuario nacion="España">Lithien</usuario>
<usuario nacion="Peru">Fern</usuario>
<usuario nacion="Peru">Dasso</usuario>
<usuario nacion="Peru">Xflash</usuario>
</flashpro>
Como vemos tenemos 7 nodos del nodo principal, cada uno de ellos (con nombre "usuario") tiene un atributo llamado "nacion", la idea es mostrar tanto el contenido de cada nodo como el valor de los atributos en unos cuadros de texto.
En nuestra película hemos creado dos columnas de cuadros de texto, aun lado hemos puesto los cuadros para los nombres y al otro para los paises, los que contendrán a los nombres tienen como nombre de variable "nom"+un numero empezando de 0: nom0, nom1, etc. El de los paises igual: "us"+un número empezando de 0: us0, us1, etc. Todo esto para hacer la distribución en base a los childNodes, que como sabemos se alojan en una matriz.
Hecho esto podemos empezar el script (ojo, se ve bien sólo en el navegador):
mixml=new XML()
mixml.load("archivo3.xml")
mixml.ignoreWhite=true
mixml.onLoad=carga
function carga(){
total=this.firstChild.childNodes.length
for(i=0;i<=total;i++){
_root["us"+i]=this.firstChild.childNodes[i].attributes.nacion
_root["nom"+i]=this.firstChild.childNodes[i].firstChild.nodeValue
}
}
Empezemos con la explicación: A estas alturas está
demás explicar las 3 primeras líneas del código,
la cuarta línea ejecuta una función llamada CARGA. ¿Qué
hace esta función? veamos:
primero alojamos en una variable el total de los nodos del documento
xml:
total=this.firstChild.childNodes.length
Luego empezamos la distribución con un bucle FOR; para los cuadros donde se carga los atributos de cada nodo, ponemos this porque ejecutamos la función desde el objeto xml creado en las primeras lineas, cuando se ejecute y vea THIS el objeto XML sabrá que lo ejecuta para él mismo...:
_root["us"+i]=this.firstChild.childNodes[i].attributes.nacion
Para cargar el contenido de cada nodo es preciso agregar un firstChild a la linea y usar nodeValue para saber el CONTENIDO del nodo:
_root["nom"+i]=this.firstChild.childNodes[i].firstChild.nodeValue
En esta última linea el último firstChild hace referencia al contenido del nodo.
Puedes bajar los flas de cada ejercicio
aquí