您的位置:首页 > Web前端 > JavaScript

源生javascript将xml转换成json格式

2015-11-04 20:21 661 查看
这是我第一次写博客哈,代码可能不是很规范,可能会有一些小BUG。支持xml文件内嵌json格式支字符串。闲话不多说,直接上代码。
function xmlToJson(xml) {
    var obj = {};
    if(xml.childNodes.length!=0&&xml.childNodes.length!=null){
        //判断子节点为1个且为文本节点,将值赋给json对象,childNodes会把文本识别为文本节点所以取子节点的value值(即是文本节点的内容)
        if(xml.childNodes.length==1&&xml.childNodes.item(0).nodeType==3){
            obj[xml.nodeName]=xml.childNodes.item(0).nodeValue.replace(/\s*$|^\s*/g,"");
        }else{
            for(var i=0; i<xml.childNodes.length;i++){
                var x=xml.childNodes.item(i);
                //标签里面有字符串又有标签时,处理该字符串
                if(x.nodeType!=1){
                    var value_text=x.nodeValue.replace(/\s*$|^\s*/g,"");
                    if(value_text!=""&&value_text!=null&&/^[\],:{}\s]*$/.test(value_text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
                            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
                            .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))){
                        obj.text=$.parseJSON(value_text);
                    }
                    else if(value_text!=""&&value_text!=null){
                        obj.text=value_text;
                    }
                    continue;}
                if(x.childNodes.length>1){//判断,子节点大于1的话肯定有元素节点
                    obj[x.tagName]=xmlToJson(x)
                }
                else if(x.childNodes.length==1){//子节点为1的话肯定是文本节点,子节点为0则为null
                    var text= x.childNodes[0].nodeValue.replace(/\s*$|^\s*/g,"");
                        //判断text是否为空且是否为json格式,是的话将其转换为json,否则将其赋值给json对象
                        if (text!=null&&text!=""&&/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
                            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
                            .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))){
                               obj[x.tagName] = $.parseJSON(text);
                        }else{
                                    obj[x.tagName]= text;
                        }
                }

            }
        }
    }
    return obj;
}


</pre><p>下面是xml文件</p><p><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<animals>
<dog color='Black'>
<name>Rufus</name>
<breed>labrador</breed>
</dog>
<dag breed='whippet'>
Adopted
<name>Marty</name>
</dag>
<certificates>[{"traceInfo":{"检验机构名称":"新西兰CCIC","检验证书编号":"XI150002XIM","检验证书日期":"2015-08-21"}},{"original":{"发证机构":"NZ CHAMBERS OF COMMERCE INC.","编号":"22 2015 05654","日期":"2015-07-28"}},{"labInfo":{"实验室名称":"Eurofins NZ Laboratory Services Ltd./Analytica laboratories Ltd.","检测报告编号":"HAUORA_实验室检测报告_XI150002XIM","认可机构":"IANZ"}}]</certificates>
<cat color="White">
<name>Matilda</name>
</cat>
</animals>
下面是打印出来的json



有问题可以评论,我会抽时间来回复的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript xml json 博客