javascript - XML 到 JavaScript 对象

标签 javascript xml json

我正在寻找一个可以解析 XML 字符串并将其转换为 JavaScript 对象的 JavaScript 库。有哪些好的?

最佳答案

以下函数解析 XML 并返回一个带有与 XML 对应的方案的 JavaScript 对象。具有相同名称的 XML 同级被折叠成数组。可以在 arrayTags 参数(标签名称字符串数组)中找到名称的节点即使在仅出现一个标签的情况下也总是产生数组。 arrayTags 可以省略。丢弃只有空格的文本节点。

function parseXml(xml, arrayTags) {
    let dom = null;
    if (window.DOMParser) dom = (new DOMParser()).parseFromString(xml, "text/xml");
    else if (window.ActiveXObject) {
        dom = new ActiveXObject('Microsoft.XMLDOM');
        dom.async = false;
        if (!dom.loadXML(xml)) throw dom.parseError.reason + " " + dom.parseError.srcText;
    }
    else throw new Error("cannot parse xml string!");

    function parseNode(xmlNode, result) {
        if (xmlNode.nodeName == "#text") {
            let v = xmlNode.nodeValue;
            if (v.trim()) result['#text'] = v;
            return;
        }

        let jsonNode = {},
            existing = result[xmlNode.nodeName];
        if (existing) {
            if (!Array.isArray(existing)) result[xmlNode.nodeName] = [existing, jsonNode];
            else result[xmlNode.nodeName].push(jsonNode);
        }
        else {
            if (arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1) result[xmlNode.nodeName] = [jsonNode];
            else result[xmlNode.nodeName] = jsonNode;
        }

        if (xmlNode.attributes) for (let attribute of xmlNode.attributes) jsonNode[attribute.nodeName] = attribute.nodeValue;

        for (let node of xmlNode.childNodes) parseNode(node, jsonNode);
    }

    let result = {};
    for (let node of dom.childNodes) parseNode(node, result);

    return result;
}

关于javascript - XML 到 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200913/

相关文章:

javascript - 在javascript上设置删除按钮

javascript - 如何在 Safari/WebKit 中构建与页面具有相同域的 iframe

javascript - 使用 Jquery 检查输入中的空格字符

javascript - 迭代 JavaScript 对象以绑定(bind)键

java - JAXB @XmlSchema 位置被忽略

c# - 如何在 botframework 中的 LUIS Json 字符串的新 "builtin.datetimeV2.timerange"(开始,结束)时间中提取值

php - 调用未定义函数 xml_parser_create()

android - ScrollView 切断顶部并在底部留出空间

ios - 如何使用 Coadable 从字典中解码 .keys

json - 如何在 Struts 2 JSON 插件中指定 map 属性