function
loadXml(str) {
if
(str == null) {
return
null;
}
var
doc = str;
try
{
doc = createXMLDOM();
doc.async = false;
doc.loadXML(str);
}
catch
(e){
doc = $.parseXML(str);
}
return
doc;
}
function
xmlTojson(xmlObj, nodename, isarray){
var
obj = $(xmlObj);
var
itemobj = {};
var
nodenames =
""
;
var
getAllAttrs =
function
(node){
var
_itemobj = {};
var
notNull = false;
var
nodechilds = node.childNodes;
var
childlenght = nodechilds.length;
var
_attrs = node.attributes;
var
firstnodeName =
"#text"
;
try
{
firstnodeName = nodechilds[0].nodeName;
}
catch
(e){
}
if
((childlenght > 0 && firstnodeName !=
"#text"
) || _attrs.length > 0){
var
_childs = nodechilds;
var
_childslength = nodechilds.length;
var
_fileName_ =
""
;
if
(undefined != _attrs){
var
_attrslength = _attrs.length;
for
(
var
i = 0; i < _attrslength; i++){
var
attrname = _attrs[i].nodeName;
var
attrvalue = _attrs[i].nodeValue;
_itemobj[attrname] = attrvalue;
}
}
for
(
var
j = 0; j < _childslength; j++) {
var
_node = _childs[j];
var
_fildName = _node.nodeName;
if
(
"#text"
== _fildName){
break
;};
if
(_itemobj[_fildName] != undefined){
if
(!(_itemobj[_fildName]
instanceof
Array)){
var
a = _itemobj[_fildName];
_itemobj[_fildName] = [a];
}
}
var
_fildValue = getAllAttrs(_node);
try
{
_itemobj[_fildName].push(_fildValue);
}
catch
(e){
_itemobj[_fildName] = _fildValue;
_itemobj[
"length"
] = 1;
}
}
}
else
{
_itemobj = (node.textContent == undefined) ? node.text : node.textContent;
}
return
_itemobj;
};
if
(nodename){
nodenames = nodename.split(
"/"
)
}
for
(
var
i = 0;i < nodenames.length; i++){
obj = obj.find(nodenames[i]);
}
$(obj).each(
function
(key, item){
if
(itemobj[item.nodeName] != undefined){
if
(!(itemobj[item.nodeName]
instanceof
Array)){
var
a = itemobj[item.nodeName];
itemobj[item.nodeName] = [a];
}
itemobj[item.nodeName].push(getAllAttrs(item));
}
else
{
if
(nodenames.length > 0){
itemobj[item.nodeName] = getAllAttrs(item);
}
else
{
itemobj[item.firstChild.nodeName] = getAllAttrs(item.firstChild);
}
}
});
if
(nodenames.length > 1){
itemobj = itemobj[nodenames[nodenames.length-1]];
}
if
(isarray && !(itemobj
instanceof
Array) && itemobj != undefined){
itemobj = [itemobj];
}
return
itemobj;
}
var
dataStr =
'<userList><user name="aa" age="32"></user><user name="bb" age="33"></user><user name="cc" age="34"><child name="cc-1" age="3"></child></user></userList>'
var
xmlObj = loadXml(dataStr);
var
jsonData = xmlTojson(xmlObj,
'userList/user'
, true);
console.log(jsonData)