javascript 将xml字符串转换成json对象

1 篇文章 0 订阅
1 篇文章 0 订阅

xml字符串转换,首先要把字符串转换成dom对象,再从dom对象里获取你要的参数,可用getElementsByTagName之类的方法。以下是2个xml字符串转成dom对象的方法
方法1:

loadXML: function(xmlString) {
    var xmlDoc = null;
    try //Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlString);
    } catch (e) {
        try //Firefox, Mozilla, Opera, etc.
        {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(xmlString, "text/xml"); 
            return xmlDoc;
        } catch (e) {
            return;
        }
    }
    return xmlDoc;
}

方法二

loadXML: function(xmlString) {
    var xmlDoc = null;
    //判断浏览器的类型
    //支持IE浏览器 
    if (!window.DOMParser && window.ActiveXObject) { //window.DOMParser 判断是否是非ie浏览器
        var xmlDomVersions = ['MSXML.2.DOMDocument.6.0', 'MSXML.2.DOMDocument.3.0', 'Microsoft.XMLDOM'];
        for (var i = 0; i < xmlDomVersions.length; i++) {
            try {
                xmlDoc = new ActiveXObject(xmlDomVersions[i]);
                xmlDoc.async = false;
                xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串
                break;
            } catch (e) {}
        }
    }
    //支持Mozilla浏览器
    else if (window.DOMParser && document.implementation && document.implementation.createDocument) {
        try {
            /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
             * 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法
             * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
             * 可能是 "text/xml""application/xml""application/xhtml+xml" 中的一个。注意,不支持 "text/html"。
             */
            domParser = new DOMParser();
            xmlDoc = domParser.parseFromString(xmlString, 'text/xml');
        } catch (e) {}
    } else {
        return null;
    }
    return xmlDoc;
}

解析数据:

xml2Json: function(xmlString) {
    var xmlDoc = this.loadXML(xmlString),
    root = xmlDoc.firstChild,
    obj = {};
    if (root && root.children && root.children.length > 0) {
    //以下解析参数步骤等可根据自己xml做修改
        for (var i = 0; i < root.children.length; i++) {
            var child = root.children[i],
            attributes = child.attributes,
            tagName = child.tagName;
            var value = child.textContent;
            if (attributes[0] && attributes[0].nodeName == 'T') {
                if (attributes[0].nodeValue == 'N') { //number
                    value = parseFloat(value);
                } else if (attributes[0].nodeValue == 'T') { //time
                    value = new Date(value);
                }
            }
            obj[tagName] = value;
        }
    }
    return obj;
}

测试数据:

"<?xml version="1.0" encoding="UTF-8"?> 
    <ROOT T="O" N="5" AM_VER="2"> 
        <startTime T="T">2015-12-04 03:20:00</startTime> 
        <startIndex T="N">1</startIndex> 
        <endIndex T="N">1000</endIndex> 
        <type T="N">1</type> 
        <endTime T="T">2015-12-06 03:20:00</endTime> 
    </ROOT> "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值