2010-11-17 13 views

Respuesta

5
+10

El problema con la biblioteca de Goessner es que devuelve una cadena JSON. Terminará convirtiendo una cadena XML en una cadena JSON, que luego tendrá que analizar _again_ para obtener un objeto JavaScript real. Funcionaría, pero probablemente exista una manera más eficiente de hacerlo. – nullability

0

El xml2json Javascript archivo desde https://bitbucket.org/surenrao/xml2json es todo lo que necesita para hacer esto.

Aquí está el enlace de descarga para la descarga rápida: https://bitbucket.org/surenrao/xml2json/get/0e0989dfe48e.zip

Una vez incluido en su proyecto, aquí algunos ejemplos de código para empezar:

var xmlStr = "<root><person><name>Bob Dylan</name></person></root>"; 
var jsObj = X2J.parseXml(xmlStr); 
var result = jsObj[0].root[0].person[0].name[0].jValue; //Bob Dylan 
20

un análisis sintáctico XML y devuelve un objeto de javascript w/un esquema que corresponde al xml. Los hermanos xml con el mismo nombre se contraen en matrices. los nodos con nombres que se pueden encontrar en el parámetro arrayTag (matriz de cadenas de nombre de tag) siempre muestran matrices, incluso en el caso de una sola aparición de etiqueta. arrayTags se pueden omitir. nodos de texto con solo espacios descartados. utilizar console.log (parseXML (myXML)) para explorar la salida

parseXml(xml, arrayTags) 
{ 
    var dom = null; 
    if (window.DOMParser) 
    { 
     dom = (new DOMParser()).parseFromString(xml, "text/xml"); 
    } 
    else if (window.ActiveXObject) 
    { 
     dom = new ActiveXObject('Microsoft.XMLDOM'); 
     dom.async = false; 
     if (!dom.loadXML(xml)) 
     { 
      throw dom.parseError.reason + " " + dom.parseError.srcText; 
     } 
    } 
    else 
    { 
     throw "cannot parse xml string!"; 
    } 

    function isArray(o) 
    { 
     return Object.prototype.toString.apply(o) === '[object Array]'; 
    } 

    function parseNode(xmlNode, result) 
    { 
     if (xmlNode.nodeName == "#text") { 
      var v = xmlNode.nodeValue; 
      if (v.trim()) { 
       result['#text'] = v; 
      } 
      return; 
     } 

     var jsonNode = {}; 
     var existing = result[xmlNode.nodeName]; 
     if(existing) 
     { 
      if(!isArray(existing)) 
      { 
       result[xmlNode.nodeName] = [existing, jsonNode]; 
      } 
      else 
      { 
       result[xmlNode.nodeName].push(jsonNode); 
      } 
     } 
     else 
     { 
      if(arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1) 
      { 
       result[xmlNode.nodeName] = [jsonNode]; 
      } 
      else 
      { 
       result[xmlNode.nodeName] = jsonNode; 
      } 
     } 

     if(xmlNode.attributes) 
     { 
      var length = xmlNode.attributes.length; 
      for(var i = 0; i < length; i++) 
      { 
       var attribute = xmlNode.attributes[i]; 
       jsonNode[attribute.nodeName] = attribute.nodeValue; 
      } 
     } 

     var length = xmlNode.childNodes.length; 
     for(var i = 0; i < length; i++) 
     { 
      parseNode(xmlNode.childNodes[i], jsonNode); 
     } 
    } 

    var result = {}; 
    if(dom.childNodes.length) 
    { 
     parseNode(dom.childNodes[0], result); 
    } 

    return result; 
} 
+1

Hola Maylow, Bienvenido a SO, será más útil si puedes proporcionar una pequeña descripción junto con tus respuestas, –

+2

feliz ahora? ..... –

+1

: D .... Agradable ... Gracias ...: D +1 por ese esfuerzo –