首頁 >web前端 >js教程 >javascript中怎麼將xml轉為json

javascript中怎麼將xml轉為json

青灯夜游
青灯夜游原創
2021-04-07 15:37:365683瀏覽

javascript中將xml轉換為json字串的方法:首先透過XML字串或請求XML檔案來取得XML的DOM物件;然後透過遍歷和遞歸來取得子元素的nodeValue值;最後拼接出JSON字串即可。

javascript中怎麼將xml轉為json

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

利用JavaScript將XML轉換為JSON

首先透過XML字串來產生XML的DOM物件:

/**
 * 通过传入xml的内容字符串来解析xml
 * @param xmlString xml字符串
 * @returns xml的Document对象
 */
function getXmlDocumentByXmlString(xmlString) {
    var xmlDoc = null;
    if (window.DOMParser) {
        var parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmlString, "text/xml");
    } else {
        //IE
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlString);
    }
    return xmlDoc;
}

或透過請求XML檔來取得XML的DOM物件:

/**
 * 通过传入xml文件路径来解析xml文档
 * @param xmlFilePath xml文档路径,如:files/test.xml
 * @returns xml的Document对象
 */
function getXmlDocumentByFilePath(xmlFilePath) {
    //xmlDocument对象
    var xmlDoc = null;
    //xmlhttp对象
    var xmlhttp = null;
    if (window.XMLHttpRequest) {
        //IE7+, FireFox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        //IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.open("GET", xmlFilePath, false);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;
    return xmlDoc;
}

接下來就是重點的部分了,透過遍歷和遞歸取得子元素的nodeValue,來拼接出JSON字串,實作將XML轉換成JSON字串:

/**
 * 将XML的Document对象转换为JSON字符串
 * @param xmlDoc xml的Document对象
 * @return string
 */
function convertToJSON(xmlDoc) {
    //准备JSON字符串和缓存(提升性能)
    var jsonStr = "";
    var buffer = new Array();

    buffer.push("{");
    //获取xml文档的所有子节点
    var nodeList = xmlDoc.childNodes;

    generate(nodeList);

    /**
     * 中间函数,用于递归解析xml文档对象,并附加到json字符串中
     * @param node_list xml文档的的nodeList
     */
    function generate(node_list) {

        for (var i = 0; i < node_list.length; i++) {
            var curr_node = node_list[i];
            //忽略子节点中的换行和空格
            if (curr_node.nodeType == 3) {
                continue;
            }
            //如果子节点还包括子节点,则继续进行遍历
            if (curr_node.childNodes.length > 1) {
                buffer.push("\"" + curr_node.nodeName + "\": {");
                generate(curr_node.childNodes);
            } else {
                var firstChild = curr_node.childNodes[0];

                if (firstChild != null) {
                    //nodeValue不为null
                    buffer.push("\"" + curr_node.nodeName + "\":\"" + firstChild.nodeValue + "\"");
                } else {
                    //nodeValue为null
                    buffer.push("\"" + curr_node.nodeName + "\":\"\"");
                }

            }
            if (i < (node_list.length - 2)) {
                buffer.push(",");
            } else {
                break;
            }
        }
        //添加末尾的"}"
        buffer.push("}");
    }

    jsonStr = buffer.join("");
    return jsonStr;
}

使用方式:透過getXmLDocumentByFilePath(xmlFilePath)getXmlDocumentByXmlString(xmlString)取得XML的Document對象,然後透過呼叫# )傳入xml的Ducument物件即可得到轉換後的JSON字串。

適用範圍:不含attribute的任一XML文件。

更多程式相關知識,請造訪:程式設計影片! !

以上是javascript中怎麼將xml轉為json的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn