javascript简单实现xml2json

2022-01-04 16:56:12js
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;
    }
}