XML 3

La sintaxis de un archivo xml como se han dado cuenta es personalizada pero no por ello podemos hacer lo que queramos, las etiquetas tienen que cerrarse (/) pero veamos ahora nuestro documento anterior de una manera distinta:

<datos>
<dato nombre="xflash" direccion="xflash.8k.com"/>
</datos>

Esta vez estamos usando la sintaxis abreviada de XML, esta permite cerrar una etiqueta con sólo el (/). También usamos atributos en vez de etiquetas, para usar etiquetas primero tenemos que tener algo que contenga esos tributos, en este caso "dato" es el que contiene a los atributos "nombre" y "direccion".

nodos padres e hijos del ejemplo

Supongamos que queremos mostrar estos atributos ¿cómo acceder a ellos? vamos a ver cómo:

Tenemos este script:

mixml=new XML()
mixml.load("archivo2.xml")
mixml.onLoad=function(){
trace(this.firstChild.childNodes[1].attributes.nombre)
}

Las dos primeras líneas ya las hemos explicado son iguales a las del ejemplo anterior, la tercera casi porque estamos acciones distintas, pensemos en esto:

el firstChild del documento xml es DATO que contiene a DATOS, osea DATOS es el CHILDNODE de DATOS, pero ahora queremos entrar a los atributos que contiene...por ello no podemos referirnos limpiamente como CHILDNODES, si tenemos en cuenta que los CHILDNODES en flash se ubican dentro de una matriz pues tenemos que indicar que número de lugar de la matriz queremos accesar. Aún no digo porque 1 o porque otro número.
Luego indicamos qué atributo queremos ver, en este caso sabemos que los atributos son "nombre" y "direccion", pues entonces queremos ver el contenido del atributo "nombre". Si testeas verás que te sale "xflash".

Pensemos ahora en este script: tenemos un cuadro de texto de nombre: "elxml" alli mostraremos lo contenido en uno de los atributos, pero para hacer más interesante el asunto creamos otro nodo, al final el xml queda asi:

<datos>
<dato nombre="xflash" direccion="xflash.8k.com"/>
<dato nombre="kadazuro" direccion="kadazuro.com"/>
</datos>

y el script así:

mixml.load("archivo2.xml")
mixml.ignoreWhite=true
mixml.onLoad=function(){
elxml=this.firstChild.childNodes[1].attributes.nombre
}

Testea: en el player del programa el cuadro de texto mostrará "xflash" pero si testeas en el navegador (F12) verás que muestra "kadazuro"...¿por qué?. Todo se debe a esta pequeña línea: "mixml.ignoreWhite=true". El problema o bug del flash y su player propio es que a la hora de reconocer los nodos de un xml toma también los espacios en blanco o saltos de línea como nodos, es decir que entre nodo y nodo hay un espacio que es tomado como otro nodo, para eliminar ese problema se coloca esa linea que permite solucionar el problema pero que solo se puede ver en el player del navegador (la solución vino después de la salida del programa). Por ello en la sintaxis sin esa linea habría 4 nodos: espacio, nodo1,espacio,nodo2, al ignorar los espacios en blanco (saltos de línea) nos quedamos con los 2 nodos reales que siempre hubo.

Si pones childNodes[0] te mostrará "xflash", si pones childNodes[1] te mostrará "Kadazuro".

Como ven no es demasiado difícil esto de XML, pero vamos a complicarnos un poco la vida en el siguiente ejercicio.

Manuel Jesús Vejarano::: Derechos Reservados