1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/* XMLF :
objet de parcours du DOM XML
getContent(node) : retourne la valeur du noeud. // gere les values simples ou les CDATA
xml2obj(node) : retourne un objet depuis le noeud XML passé en parametre
*/
var XMLF = {
xml2obj : function(node, arrayForcedNodes) {
var arrayForced = arrayForcedNodes ? new RegExp('\\b(' + arrayForcedNodes.join('|') + ')\\b') : null;
var x2o = XMLF.xml2obj;
var obj = {};
var xmlNodes = 0;
for (var i=0; i<node.childNodes.length; i++) {
var n = node.childNodes[i];
var name = n.nodeName;
if (n.nodeType==1) {
xmlNodes++;
if (obj[name]==null) {
var tmpObj = x2o(n,arrayForcedNodes);
obj[name] = arrayForced && name.match(arrayForced) ? [tmpObj] : tmpObj;
} else {
if(!(obj[name] instanceof Array)) {
obj[name]=[obj[name]];
}
obj[name].push(x2o(n,arrayForcedNodes));
}
}
}
if (xmlNodes==0) {
var val = XMLF.getContent(node);
if (!val) {
if (node.attributes.length==0) {
val = '';
} else {
var val = {};
val._attributes = XMLF.getAttributes(node);
}
} else if (val.match(/^\s*true|false\s*$/)) {
val=eval(val);
}
return val;
} else if(node.attributes && node.attributes.length>0) {
obj._attributes = XMLF.getAttributes(node);
}
return obj
},
getContent : function(node) {
var str = [];
for (var i=0; i<node.childNodes.length; i++) {
str.push(node.childNodes[i].nodeValue);
}
return str.join('');
},
getAttributes : function(node) {
var val = {};
for (var i=0; i<node.attributes.length; i++) {
var attr = node.attributes[i];
val[attr.nodeName] = attr.nodeValue;
}
return val;
}
} |