[英]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.