schit/js/xml2json.js

35 lines
952 B
JavaScript

/**
* This function coverts a DOM Tree into JavaScript Object.
* @param srcDOM: DOM Tree to be converted.
*/
function xml2json(srcDOM) {
let children = [...srcDOM.children];
// base case for recursion.
if (!children.length) {
return srcDOM.innerHTML
}
// initializing object to be returned.
let jsonResult = {};
for (let child of children) {
// checking is child has siblings of same name.
let childIsArray = children.filter(eachChild => eachChild.nodeName === child.nodeName).length > 1;
// if child is array, save the values as array, else as strings.
if (childIsArray) {
if (jsonResult[child.nodeName] === undefined) {
jsonResult[child.nodeName] = [xml2json(child)];
} else {
jsonResult[child.nodeName].push(xml2json(child));
}
} else {
jsonResult[child.nodeName] = xml2json(child);
}
}
return jsonResult;
}