xml转json的js代码



function xmlToJson(xml) {
    // 创建一个JSON对象
    let obj = {};

    if (xml.nodeType === 1) { // element
        // 元素转换为属性为对象键的键值对
        for (let attr of xml.attributes) {
            obj[`@${attr.name}`] = attr.value;
        }
    } else if (xml.nodeType === 3) { // text
        obj = xml.nodeValue;
    }

    // 处理子节点
    if (xml.hasChildNodes()) {
        for (let child of xml.childNodes) {
            let nodeName = child.nodeName;

            // 如果子节点名称已经存在于obj中,并且类型为数组,则添加
            if (obj[nodeName] && typeof obj[nodeName] === "object" && obj[nodeName].push !== undefined) {
                obj[nodeName].push(xmlToJson(child));
            } else if (obj[nodeName]) { // 如果已经存在但不是数组,则转换为数组
                obj[nodeName] = [obj[nodeName], xmlToJson(child)];
            } else { // 否则,直接赋值
                obj[nodeName] = xmlToJson(child);
            }
        }
    }

    return obj;
}

// 示例用法
// 假设你有一个XML字符串,你需要先将其解析为DOM对象
// 这里只是示例,实际使用时需要根据你的环境来解析XML
// let xmlDoc = new DOMParser().parseFromString('<root><child>text</child></root>', 'text/xml');
// let json = xmlToJson(xmlDoc.documentElement);
// console.log(JSON.stringify(json, null, 2));

// 注意:上面的示例代码省略了XML字符串的解析部分,
// 因为直接处理字符串在JavaScript中通常需要使用额外的库(如xmldom)来模拟DOMParser的完整功能,
// 或者如果XML数据来自网络,你可能需要使用fetch API或其他网络请求方法来获取它,
// 并将响应体作为字符串传递给DOMParser。

此代码段定义了一个`xmlToJson`函数,它接受一个XML DOM节点作为输入,并递归地将其转换为JSON对象。注意,为了完全运行此代码,你需要有一个有效的XML DOM节点(例如,通过`DOMParser`解析的XML字符串),而此代码段中的注释部分提供了如何使用此函数的示例,但省略了实际的XML字符串解析部分。

此外,由于XML的复杂性(如命名空间、CDATA节等),此基本实现可能需要根据具体需求进行调整或扩展。对于更复杂的XML转JSON任务,考虑使用现成的库,如`xml2js`,它提供了更全面的功能和更好的错误处理。