簡體   English   中英

讀取xml文件並將數據存儲在jquery中的數組中

[英]Read xml file and store data in array in 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中實現呢?

嘗試這個

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;
}

關於您的數據必須有一些合理的假設,否則您將一無所獲。
例如,我假設每個節點可能包含以下之一:
-文字,僅此而已
-子節點,都相等(例如<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在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM