2015-04-30 4 views
0

Я хочу, чтобы данные из XML-файла были прочитаны и сохранены в массиве/другой структуре данных в jQuery.Прочитайте xml-файл и сохраните данные в массиве в jquery

Вот мой XML данные:

<dependencieList> 
    <dependencies> 
     <pluginname>OpenJDK Runtime Environment</pluginname> 
     <version>1.7.0_65</version> 
     <description>Open JDK Runtime Environment</description> 
    </dependencies> 
    <dependencies> 
     <pluginname>Adobe Flash Player</pluginname> 
     <version>17.0 r0</version> 
     <description>Shockwave Flash Player</description> 
    </dependencies> 
</dependencieList> 

Я хочу, чтобы данные XML, которые будут храниться как наборы, как мы делаем в программирования C, как я могу осуществить это в JQuery?

+0

Что именно вы планируете хранить в массиве из xml (напр. узлы и значения или определенное значение узла)? Вы хотите, чтобы это был одномерный или многомерный массив? –

+0

Привет Kaustav, я хочу сохранить значения узлов и в многомерном массиве. – ritu

ответ

0

Попробуйте

function xmlToJson(xml) { 

    // Create the return object 
    var obj = {}; 

    if (xml.nodeType == 1) { // element 
     // do attributes 
     if (xml.attributes.length > 0) { 
      obj["@attributes"] = {}; 
      for (var j = 0; j < xml.attributes.length; j++) { 
       var attribute = xml.attributes.item(j); 
       obj["@attributes"][attribute.nodeName] = attribute.nodeValue; 
      } 
     } 
    } else if (xml.nodeType == 3) { // text 
     obj = xml.nodeValue; 
    } 

    // do children 
    if (xml.hasChildNodes()) { 
     for(var i = 0; i < xml.childNodes.length; i++) { 
      var item = xml.childNodes.item(i); 
      var nodeName = item.nodeName; 
      if (typeof(obj[nodeName]) == "undefined") { 
       obj[nodeName] = xmlToJson(item); 
      } else { 
       if (typeof(obj[nodeName].push) == "undefined") { 
        var old = obj[nodeName]; 
        obj[nodeName] = []; 
        obj[nodeName].push(old); 
       } 
       obj[nodeName].push(xmlToJson(item)); 
      } 
     } 
    } 
    return obj; 
} 
+0

Элвин, я могу разобрать XML-файл, но я не понимаю, как сохранить значения узлов в массиве – ritu

+0

, обновленный resposne и изменен на функцию преобразования. –

0

Там должны быть какие-то разумные предположения о ваших данных, иначе вы не получите ничего.
Например, я полагаю, что каждый узел может содержать одно из:
- текст и ничто иное
- дочерние узлы, все одинаковые (как <dependencies>)
- дочерние узлы, все разные (как <pluginname> и т.д.)

я

<script type="text/my-data" id="datasrc"> 
<dependencieList> 
    ... etc ... your data here 
</dependencieList> 
</script> 

<script> 
var src = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + 
      $('#datasrc').html(), 
    result = {}; 

try { 
    var $x = $($.parseXML (src)); // rely on jQuery "universal" parsing 
    parseNode ($x.children().first(), result); 
} catch (e) { 
} 

$('#result').text (JSON.stringify (result, null, 2)); 

function parseNode ($node, obj) { 
    var name = $node[0].nodeName, 
     val = ''; 

    if ($node.children().length) { 
     val = {}; 
     $node.children().each (function() { 
      parseNode ($(this), val); 
     }); 
    } else { 
     val = $node.text(); 
    } 

    if (!obj[name]) { 
     obj[name] = val; 
    } else if ($.isArray (obj[name])) { 
     (obj[name]).push (val); 
    } else { 
     obj[name] = [obj[name], val]; 
    } 
} 
</script> 

и получить результат

{ 
    "dependencieList": { 
    "dependencies": [ 
     { 
     "pluginname": "OpenJDK Runtime Environment", 
     "version": "1.7.0_65", 
     "description": "Open JDK Runtime Environment" 
     }, 
     { 
     "pluginname": "Adobe Flash Player", 
     "version": "17.0 r0", 
     "description": "Shockwave Flash Player" 
     } 
    ] 
    } 
} 

jsFiddle is here

Смежные вопросы