JavaScriptを利用してXMLをJSONに変換します.


最近開発プロジェクトの時に必要なものがありました.データベースから検索したxml新聞の文字列は解析処のパラメータが必要です.ページで修正をサポートするため、JavaScriptを利用してXMLテキストを解析する機能が生まれました.具体的な考え方は、XMLのDOMオブジェクトを現在取得し、サブ要素のnodeValueを巡回と再帰的に取得することによって、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;
}
次はポイントです.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のDcumentオブジェクトを取得し、convertToJSON(xmlDocument)によってxmlに入ってきたDucumentオブジェクトを呼び出して変換後のJSON文字列を得ることができる.
適用範囲:atributeを含まない任意のXMLドキュメント.
今は第一バージョンのXMLからJSONに移行するツールです.足りないところと改善が必要なところがたくさんあるかもしれません.GitHubで最新のコードを更新します.プロジェクトの住所:https://github.com/TsuiXh/xml_Jsonconvertertool、皆さんの質問を歓迎します.