Leer archivos XML con JQuery

Desde que JQuery llegó a nuestras vidas, Javascript se ha convertido en un camino de rosas 😀 Tanto es así que en pocas líneas podemos conseguir el parseo completo de un archivo XML ¡Vamos a verlo!

En primer lugar hay que aclarar que podemos toparnos principalmente con tres formatos de XML diferentes:

  1. Utilizando atributos: Cada elemento guarda su información dentro de atributos. Los atributos deberían utilizarse para información predeterminada, metadatos, archivos grandes (los atributos tienden a ocupar menos bytes que los elementos).

    [xml]<?xml version="1.0" encoding="utf-8" ?>
    <Blogs>
      <blog name="WebLog Expert – Powerful log analyzer"
            description="Download and analyze Apache and IIS Web logs on your own PC."
            url=" http://www.weblogexpert.com/"/>
      <blog name="Professional drupal themes"
            description="For professional drupal themes with a unique look and feel, visit TopNotchThemes.com."
            url="http://www.topnotchthemes.com/"/>
      <blog name="Paypal Developer Community"
            description="The community for developping paypal payment processing scripts."
            url="http://www.pdncommunity.com" />"
    </Blogs>[/xml]

  2. Utilizando nodos/elementos: Los elementos contienen a su vez otros elementos llamados nodos. Se suelen utilizar para almacenar datos.

    [xml]<?xml version="1.0" encoding="utf-8" ?>
    <Blogs>
      <blog>
        <name>WebLog Expert – Powerful log analyzer</name>
        <description>Download and analyze Apache and IIS Web logs on your own PC.</description>
        <url>http://www.weblogexpert.com/</url>
      </blog>
      <blog>
        <name>Professional drupal themes</name>
        <description>For professional drupal themes with a unique look and feel, visit TopNotchThemes.com.</description>
        <url>http://www.topnotchthemes.com/</url>
      </blog>
      <blog>
        <name>Paypal Developer Community</name>
        <description>The community for developping paypal payment processing scripts.</description>
        <url>http://www.pdncommunity.com</url>
      </blog>
    </Blogs>[/xml]

  3. Mezcla de los dos anteriores.

Dependiendo del cómo esté almacenado utilizaremos un método u otro para recuperarlo.

Recuperación de atributos

[js]
//Read attributes

$.get("Attributes.xml", function (xml) {
    $(xml).find("blog").each(function () {

       var name = $(this).attr(‘name’);
       var description = $(this).attr(‘description’);
       var url = $(this).attr(‘url’);

alert(name + " " + description + " " + url);
    });
});

[/js]

Recuperación de nodos/elementos

[js]

//Read nodes
  $.get("Nodes.xml", function (xml) {
    $(xml).find("blog").each(function () {
       var name = $(this).find(‘name’).text();
       var description = $(this).find(‘description’).text();
      var url = $(this).find(‘url’).text();

       alert(name + " " + description + " " + url);
    });
});

[/js]

Lo que estamos haciendo en ambos casos es una iteración a través de each por cada elemento blog que tengamos en el archivo. Dependiendo del tipo que esperemos utilizaremos attr para recuperar los atributos y find para los elementos.

Espero que sea de utilidad 🙂

¡Saludos!

26 Comments

  1. Pepe marzo 22, 2011 at 5:04 pm

    ojonudo !

    Reply
    1. Gisela marzo 23, 2011 at 7:12 pm

      ¡Gracias Pepe! 😀

      ¡Saludos!

      Reply
  2. elcharli agosto 12, 2011 at 5:05 pm

    Saludos, he tratado de ejecutar tu codigo en mi portatil, con el navegador IE y con Firefox y nada, no funciona ni con uno ni con otro, a que puede ser debido?

    Reply
    1. Gisela agosto 14, 2011 at 1:21 pm

      Hola elcharli,

      ¿Te da algún error de javascript al intentar probarlo?

      ¡Saludos!

      Reply
      1. Lenin junio 15, 2013 at 7:08 pm

        quisiera recorrer los atributos del elemento se puede

        Reply
  3. Deimak febrero 8, 2012 at 3:32 pm

    Muy buen post, es muy claro sencillo y facil de comprender. Muchas Gracias …. wenisimo

    Reply
    1. Gisela febrero 12, 2012 at 12:39 am

      Muchas gracias Deimak, me alegra que te haya sido de utilidad 😀

      ¡Saludos!

      Reply
    1. Gisela junio 28, 2012 at 8:54 pm

      Gracias por tu comentario Alexander, ya estoy solucionando el malware y en las próximas horas desaparecerá de la lista negra de google.

      Un saludo,

      Reply
  4. Christian septiembre 11, 2012 at 4:10 pm

    UNA EXPLICACION MUY MUY BUENA EN CUANTO A LEER UN ARCHIVO XML, EN ESPECIAL LA PARTE DONDE EXPLICAS LOS DISTINTOS TIPOS DE XML, EXISTEN MUCHOS TUTORIALES EN LA WEB SOBRE LEER XML PERO NINGUNO EXPLICA LOS TIPOS DE XML Y MAS IMPORTANTE AUN, NO HABLAN DE KE EL ACCESO DEPENDE DEL TIPO DE XML, GRACIAS.

    Reply
  5. Isidro septiembre 19, 2012 at 12:51 am

    Hola!! Soy novato en esto de construccion Web, pero una de las cosas que mas me llaman es la lectura de ficheros XML. Ahora me podrias decir como lo coloco en un archivo html?

    Gracias por adelantado

    Reply
    1. Gisela octubre 28, 2012 at 9:08 am

      Hola Isidro, disculpa la tardanza 🙁

      ¿Has creado el archivo Atributes.xml en el raíz con el XML para poder recuperarlo desde el código? ¿Referenciaste JQuery ANTES de insertar este fragmento del ejemplo? ¿Te da algún tipo de error?

      ¡Saludos!

      Reply
  6. felix octubre 25, 2012 at 10:52 pm

    Hola, muy buena explicación pero bueno cuando lo coloco en un html no corre y me intriga porque acaso debo de poner mi proyecto en un servidor apache como el xamp? por ejemplo? saludos

    Reply
    1. Gisela octubre 28, 2012 at 9:10 am

      Hola felix,

      Muchas gracias por tu comentario.

      No, no sería necesario ponerlo en un servidor web. Las únicas consideraciones que hay que tener en cuenta son:

      1. Referenciar la librería JQuery antes de insertar el código que presento en el post.
      2. Atributes.xml con el contenido de ejemplo debe estar en la raíz para que el código JavaScript lo encuentre 🙂

      ¿Te da algún error en particular?

      ¡Saludos!

      Reply
  7. vicenrele noviembre 2, 2012 at 12:51 am

    Buen artículo donde se diferencian los tipos de XML.
    Pero para probar el código jQuery hace falta servidor. Sin él salta un error que dice que no encuentra el xml (y sí, lo he puesto en la raíz y he referenciado bien jQuery).
    Me imagino que esto es porque ‘$.get’ al fin y al cabo es una petición Ajax…

    Reply
  8. slipkvayne diciembre 27, 2012 at 6:03 am

    Hola, tu código me ha servido de mucho, pero tengo una pregunta ¿cómo le hago para que el .each no se recorra todo el documento en busca del nodo blog si no que solo encontrando los primeros 5 nodos blog se rompa el recorrido? De antemano gracias y saludos

    Reply
    1. Gisela diciembre 28, 2012 at 12:59 am

      Muchas gracias por tu comentario slipkvayne 🙂

      En cuanto a lo que preguntas, podrías controlar cuántos nodos se van localizando con un contador y, en el momento que consigas los que necesitas, hacer un return false; para que salga del .each.

      Espero que te haya resuelto la duda.

      ¡Saludos!

      Reply
  9. Miguel enero 25, 2013 at 6:41 pm

    Buen dia… gracias por el aporte muy bueno… solo tengo una duda, estoy intentando cargar el XML cuando le das click a algo, Carga diferentes NodosPadre con diferentes clicks por eso queria poner solo 1 codigo de lectura de XML y mandarle el nombre del NodoPadre por funcion y que me regrese el dato. pero no logro ponero en la funcion. pero no he podido ponerlo en funcion por que parece que ya es una funcion que se ejecuta automaticamente y cuando intento usar la informacion no me deja por que aun no esta cargada la informacion del XML… intenten darle un return a mi funcion pero aun asi no me regresa nada. te pongo mi linea por si puedes darme una orientacion gracias de antemano

    $.fn.ReadXml = (function($XmlVar){
    $Vn_i = 0;
    $Varray_XmlFile = [];
    $.get(«sucursales.xml», function (xml) {
    $(xml).find($XmlVar).find(«CIUDAD»).each(function () {
    $Vn_i = $Vn_i + 1;
    $Varray_City[$Vn_i] = $(this).find(‘SUCURSAL’).text();
    });
    });return $Varray_City[];
    });

    $(«.MapNav»).click(function(){
    $Varray_Ciudad = $(«#function»).ReadXml(«BC»)
    });

    Reply
  10. Marti Bravo marzo 3, 2013 at 5:14 pm

    Hola Gisela!
    Hace dos meses tambien me ayudaste a actualizar a WP7.8
    Gracias por tu post.
    Lo necesitaba urgentemente y gracias a ti ya tengo lista una aplicación.
    Thanks! 😉

    Reply
  11. Yasuarinha junio 26, 2013 at 4:11 pm

    Excelente post! Soy nueva trabajando con JQuery y un ejemplo más sencillo y claro que este, no había podido encontrar. Mil gracias!

    Reply
  12. german quiñonez diciembre 23, 2013 at 8:56 pm

    hola Gisela, poseo problemas, estoy usando tu código y en ie y chrome me sale el siguiente error:
    XMLHttpRequest cannot load file://disco%20mac/…/contenidos.xml. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘null’ is therefore not allowed access.

    nota en safari me funciona bien
    te agradecería cualquier sugerencia

    bye

    Reply
    1. Gisela diciembre 23, 2013 at 9:45 pm

      Hola german,

      El motivo de ese error es porque se está intentando acceder a un recurso que está en otro dominio, diferente a donde se está sirviendo la aplicación, a través de JavaScript. Lo que te indica el navegador es que no se está especificando en la cabecera de la petición el permiso necesario para acceder. Puedes leer más información al respecto en este otro artículo. Prueba a ubicar el archivo en el mismo sitio en el que se está ejecutando la aplicación (y mismo puerto). No deberías de tener poblemas.

      ¡Saludos!

      Reply
  13. danielhp85 marzo 24, 2014 at 7:40 pm

    Hola me gusta lo que has hecho, pero quisiera saber como lo implemento en el html. por favor ayúdame con ese dato.
    Saludos

    Reply
    1. Gisela Torres marzo 28, 2014 at 9:58 am

      Hola Daniel,

      No sé a qué te refieres exactamente… ¿A representarlo quizás?

      Saludos

      Reply
  14. Mauricio enero 15, 2015 at 7:00 pm

    Quiero Consumirlo Dinamicamente, Quiero saber cuales nodos pertenecen a un nodo padre, pero dinamico sin tenerle que decir con el .find() cual es el padre y asi sucesivamente

    Reply
  15. Erick Angeles abril 21, 2015 at 10:40 pm

    Hola Gisela.

    sabes si con jquery es posible leer un CFDI y retornar los valores a HTML

    Reply

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.