Saltar al contenido

Análisis XML de una variable string en JavaScript

El tutorial o código que encontrarás en este artículo es la solución más fácil y válida que hallamos a tus dudas o dilema.

Solución:

Respuesta actualizada para 2017

Lo siguiente analizará un XML string en un documento XML en todos los navegadores principales. A menos que necesite soporte para IE <= 8 o algún navegador oscuro, puede usar la siguiente función:

function parseXml(xmlStr) 
   return new window.DOMParser().parseFromString(xmlStr, "text/xml");

Si necesita admitir IE <= 8, lo siguiente hará el trabajo:

var parseXml;

if (typeof window.DOMParser != "undefined") 
    parseXml = function(xmlStr) 
        return new window.DOMParser().parseFromString(xmlStr, "text/xml");
    ;
 else if (typeof window.ActiveXObject != "undefined" &&
       new window.ActiveXObject("Microsoft.XMLDOM")) 
    parseXml = function(xmlStr) 
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    ;
 else 
    throw new Error("No XML parser found");

Una vez que tengas un Document obtenido a través de parseXmlpuede usar los métodos/propiedades transversales DOM habituales, como childNodes y getElementsByTagName() para obtener los nodos que desea.

Ejemplo de uso:

var xml = parseXml("Stuff");
alert(xml.documentElement.nodeName);

Si está usando jQuery, desde la versión 1.5 puede usar su función integrada parseXML() método, que es funcionalmente idéntico a la función anterior.

var xml = $.parseXML("Stuff");
alert(xml.documentElement.nodeName);

Actualización: para obtener una respuesta más correcta, consulte la respuesta de Tim Down.

Internet Explorer y, por ejemplo, los navegadores basados ​​en Mozilla exponen diferentes objetos para el análisis de XML, por lo que es aconsejable usar un marco de JavaScript como jQuery para manejar las diferencias entre navegadores.

Un ejemplo muy básico es:

var xml = "Beethoven";

var result = $(xml).find("album").text();

Nota: Como se señaló en los comentarios; jQuery realmente no realiza ningún análisis XML, se basa en el método DOM innerHTML y lo analizará como lo haría con cualquier HTML, así que tenga cuidado al usar nombres de elementos HTML en su XML. Pero creo que funciona bastante bien para el ‘análisis’ XML simple, pero probablemente no se sugiera para el análisis XML intensivo o ‘dinámico’ en el que no se indica por adelantado qué XML se reducirá y esto prueba si todo se analiza como se esperaba.

La mayoría de los ejemplos en la web (y algunos presentados anteriormente) muestran cómo cargar un XML de un archivo de una manera compatible con el navegador. Esto resulta fácil, excepto en el caso de Google Chrome, que no es compatible con el document.implementation.createDocument() método. Al usar Chrome, para cargar un archivo XML en un objeto XmlDocument, debe usar el objeto XmlHttp incorporado y luego cargar el archivo pasando su URI.

En tu caso, el escenario es diferente, porque quieres cargar el XML a partir de una string variable, no una URL. Sin embargo, para este requisito, Chrome supuestamente funciona como Mozilla (o eso he oído) y es compatible con el método parseFromString().

Aquí hay una función que uso (es parte de la biblioteca de compatibilidad del navegador que estoy construyendo actualmente):

function LoadXMLString(xmlString)

  // ObjectExists checks if the passed parameter is not null.
  // isString (as the name suggests) checks if the type is a valid string.
  if (ObjectExists(xmlString) && isString(xmlString))
  
    var xDoc;
    // The GetBrowserType function returns a 2-letter code representing
    // ...the type of browser.
    var bType = GetBrowserType();

    switch(bType)
    
      case "ie":
        // This actually calls into a function that returns a DOMDocument 
        // on the basis of the MSXML version installed.
        // Simplified here for illustration.
        xDoc = new ActiveXObject("MSXML2.DOMDocument")
        xDoc.async = false;
        xDoc.loadXML(xmlString);
        break;
      default:
        var dp = new DOMParser();
        xDoc = dp.parseFromString(xmlString, "text/xml");
        break;
    
    return xDoc;
  
  else
    return null;

Si entiendes que te ha sido de provecho este post, sería de mucha ayuda si lo compartes con el resto programadores de esta manera contrubuyes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *