xml2json(`
<ul>
<li>111</li>
<li>222</li>
<li>
<sub>1113</sub>
<sub>2222</sub>
</li>
</ul>
`)
function xml2json(xml) {
var doc = new DOMParser().parseFromString(xml, 'text/xml');
if (doc instanceof XMLDocument === false) {
return {};
}
return dep(doc);
function dep(xml) {
var obj = {};
if (xml.childElementCount) {
Array.from(xml.children).forEach(item => {
var nodeName = item.nodeName;
if (item.childElementCount) {
if (obj[nodeName] == undefined) {
obj[nodeName] = dep(item);
} else {
if (obj[nodeName].push === undefined) {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(dep(item));
}
} else {
if (obj[nodeName] == undefined) {
obj[nodeName] = item.textContent;
} else {
if (obj[nodeName].push === undefined) {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(item.textContent);
}
}
});
} else {
if (obj[xml.nodeName] == undefined) {
obj[xml.nodeName] = xml.textContent;
} else {
if (obj[xml.nodeName].push === undefined) {
var old = obj[xml.nodeName];
obj[xml.nodeName] = [];
obj[xml.nodeName].push(old);
}
obj[xml.nodeName].push(xml.textContent);
}
}
return obj;
}
}