2010-11-17 8 views

Antwort

5
+10

Das Problem mit Goessner-Bibliothek ist, dass es eine JSON-Zeichenfolge zurückgibt. Am Ende werden Sie eine XML-Zeichenfolge in eine JSON-Zeichenfolge konvertieren, die Sie anschließend _again_ analysieren müssen, um ein tatsächliches Javascript-Objekt zu erhalten. Es würde funktionieren, aber es gibt wahrscheinlich einen effizienteren Weg, es zu tun. – nullability

0

Die xml2json JavaScript-Datei von https://bitbucket.org/surenrao/xml2json alles, was Sie dies tun müssen, ist.

Hier ist der Download-Link für den schnellen Download: https://bitbucket.org/surenrao/xml2json/get/0e0989dfe48e.zip

Einmal in Ihrem Projekt enthalten ist, hier einige Beispielcode, um loszulegen:

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

parst XML und gibt ein Javascript-Objekt w/a Schema das entspricht dem xml. XML-Geschwister mit demselben Namen werden in Arrays zusammengefasst. Knoten mit Namen, die im arrayTags -Parameter (Array von Tag-Name-Strings) gefunden werden können, führen immer Yeld-Arrays aus, selbst wenn nur ein Tag auftritt. ArrayTags können weggelassen werden. Textknoten mit nur Leerzeichen werden verworfen. Verwenden Sie console.log (parseXml (myxml)), um die Ausgabe zu untersuchen

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

Hallo Maylow, Willkommen bei SO, es wird hilfreicher sein, wenn Sie eine kleine Beschreibung zusammen mit Ihren Antworten, –

+2

glücklich jetzt geben können? ..... –

+1

: D .... Schön .... Danke ...: D +1 für diese Mühe –