function xmlToVar (data) { if (!data.hasChildNodes ()) return null; var ret = null; for (var node in data.childNodes) { var child = data.childNodes[node]; if (child.nodeType === 3 && child.nodeValue !== null) { ret = data.childNodes[node].nodeValue; break; } } switch (data.getAttribute ('type')) { case 'integer': ret = parseInt (ret, 10); break; case 'double': ret = parseFloat (ret); } return ret; } function xmlToObjectArray (data) { var ret = new Array (); if (! data.hasChildNodes ()) return ret; for (var node in data.childNodes) { var child = data.childNodes[node]; if (child.nodeType === 1) { name = child.getAttribute ('name'); switch (child.nodeName) { case 'variable': ret[name] = xmlToVar (child); break; case 'array': ret[name] = xmlToArray (child); break; case 'class': var cName = child.getAttribute ('class'); if (typeof (eval (cName)) === 'function') ret[name] = eval ("new " + cName + "(child)"); else ret[name] = xmlToObjectArray (child); } } } return ret; } function xmlToArray (data) { var ret = new Array (); if (! data.hasChildNodes ()) return ret; for (var node in data.childNodes) { var child = data.childNodes[node]; if (child.nodeType === 1 && child.nodeName === 'item') { var key = child.getAttribute ('key'); for (var _node in child.childNodes) { var _child = child.childNodes[_node]; if (_child.nodeType === 1) { switch (_child.nodeName) { case 'variable': ret[key] = xmlToVar (_child); break; case 'array': ret[key] = xmlToArray (_child); break; case 'class': var cName = child.getAttribute ('class'); if (typeof (eval (cName)) === 'function') ret[key] = eval ("new " + cName + "(child)"); else ret[key] = xmlToObjectArray (child); } } } } } return ret; } function c_xmlify (data) { if (! data.hasChildNodes ()) return; for (var node in data.childNodes) { var child = data.childNodes[node]; if (child.nodeType === 1) { var name = child.getAttribute ('name'); if (typeof (this[name]) !== 'undefined') { switch (child.nodeName) { case 'variable': this[name] = xmlToVar (child); break; case 'array': this[name] = xmlToArray (child); break; case 'class': var cName = child.getAttribute ('class'); if (typeof (eval (cName)) === 'function') this[name] = eval ("new " + cName + "(child)"); else this[name] = xmlToObjectArray (child); } } } } } function deXmlify (data) { var ret = null; var child = data.firstChild; switch (child.nodeName) { case 'variable': ret = xmlToVar (child); break; case 'array': ret = xmlToArray (child); break; case 'class': var cName = child.getAttribute ('class'); if (typeof (eval (cName)) === 'function') ret = eval ("new " + cName + "(child)"); else ret = xmlToObjectArray (child); } return ret; }