easyXML en JavaScript

Agregar a favoritos

3 Comentarios

Posteado hace 902 días en:

En AJAX hay dos formas de devolver un respuesta del servidor, XML o HTML, para ello accedemos con los métodos
responseXML o responseTEXT, hasta el momento la forma mas fácil de acceder al contenido es mediante la segunda opción, aunque la primera es mucho mas potente ya que puedes indexar o ejecutar comandos según la estructura del XML devuelta.

Para acceder y leer el XML es un poquito lioso. Imaginemos este XML (sin saltos de linea):


<ajax>
<info type="200">Ok</info>
<block id="content"><![CDATA[ Content HTML ]]></block>
<block id="content2"><![CDATA[ Content HTML 2 ]]></block>
</ajax>
Para leer este XML con js lo hacemos de la siguiente forma:


var xml = obj.responseXML.documentElement;
for (i=0; i<xml.childNodes.length; i++) {
//nombre del tag
alert(xml.childNodes[i].nodeName); 
//valor del tag
alert(xml.childNodes[i].firstChild.nodeValue);
}

No es muy lioso que digamos pero la cosa se complica cuando se anidan mas etiquetas o cuando incluimos atributos.
Con easyXML he intentado simplificar el proceso para que el acceso sea menos complejo.

easyXML depende de 3 funciones y dos variables.

  1. .tag función busqueda de nodos segun su nombre
  2. .item función para iterar sobre los nodos
  3. .name nombre del nodo
  4. .value valor del nodo // puede ser un objeto si es un contenedor
  5. .attr función para acceder a los atributos

El mismo ejemplo con easyXML:


var xml = new easyXML(obj.responseXML);
while(child = xml.item()) {
alert(child.name);
alert(child.value);
}

Por medio del bucle while conseguimos desplazarnos por todo los ítems secundarios. También con la función item() puedes acceder a un nodo en concreto, xml.item(1).value devuelve “Content HTML”.

Para acceder a los atributos es tan sencillo como usar la función attr o acceder directamente, xml.item().attr.type o xml.item().attr("type") devuelve el atributo type del primer elemento.

El XML lo puedes complicar tantas veces como quieras, para acceder a los nodos solamente tienes que usar el bucle y la función item dentro del objeto.


var xml = new easyXML(obj.responseXML);
while(child = xml.item()) {
//en caso de que child tambi&#233;n anide, child.value ser&#225; un objeto
//child.value.item() es igual a child.item()
while(next = child.item()) {
alert(next.value);
}
}

También puedes buscar los childNodes dependiendo del nombre del tag.


var xml = new easyXML(obj.responseXML);
var block = xml.tag("block");
while(item = block.item()) {
alert(item.value);
}

Puedes descargar easyXML y probar su funcionamiento con tus aplicaciones AJAX.


  • avatar

    show#1 hace 902 días

    Siempre me gusta ver ejemplos, ya que de momento no me entero de nada me gusta ver que hace para saber si me puede interesar guardarlas para cuando sepa AJAX. ;)

  • avatar

    robert#2 hace 891 días

    ¿Has probado a usar DOM?
    por ejemplo para buscar el primer por su id

    var doc = obj.responseXML;
    var element = doc.getElementById(“content””);
    alert(element.tagName)

    Mucho mas sencillo que recorrer todo el xml. Buscas lo que quieres y listo

  • avatar

    andres#3 hace 651 días

    Cordial Saludo, está muy interesante el script, y opino lo mismo que show, sería muy interesante ver un ejemplo, muchas gracias