z4x,jquery解析xml插件,很好用哦

z4x,本来打算单独写的,不过jquery的用户实在是很多,就搭搭这个顺风车吧,改造成jquery解析xml插件,用过的同事都说很好用哦。顺便加上一个反射方法。

 

     该插件有两个方法:

     1). z4x 解析xml并转化为json对象。

     2). 反射方法,可以反射json对象。

 

 

0. jquery.z4x.js 源码:

 

$.extend({
    z4x: function(s) {
        var dom;
        if (typeof(s) == "object") {
            dom = s;
        } else if (typeof(s) == "string") {
            if (window.ActiveXObject) {
                dom = new ActiveXObject("Microsoft.XmlDom");
                dom.async = "false";
                dom.loadXML(s);
            } else {
                dom = new DOMParser().parseFromString(s, "text/xml");
            }
        }
        var _dig = function(ele) {
            var oo = {};
            var alen = (ele.attributes) ? ele.attributes.length: 0;
            for (var i = 0; i < alen; i++) {
                oo["$" + ele.attributes[i].name] = ele.attributes[i].value;
            }

            var elen = ele.childNodes.length;
            if (elen == 0) return oo;

            var tem;
            for (var i = 0; i < elen; i++) {
                tem = oo[ele.childNodes[i].nodeName];

                if (typeof(tem) == "undefined") {

                    if (ele.childNodes[i].childNodes.length == 0) {

                        if (ele.childNodes[i].nodeName == "#text" || ele.childNodes[i].nodeName == "#cdata-section") {
                            oo["$$"] = ele.childNodes[i].nodeValue;
                        } else {
                            oo[ele.childNodes[i].nodeName] = [_dig(ele.childNodes[i])];
                        }

                    } else {
                        oo[ele.childNodes[i].nodeName] = [_dig(ele.childNodes[i])];
                    }
                } else {
                    tem[tem.length] = _dig(ele.childNodes[i]);
                    oo[ele.childNodes[i].nodeName] = tem;
                }
            }
            return oo;
        };

        var oo = {};
        oo[dom.documentElement.nodeName] = _dig(dom.documentElement);
        return oo;
    },
    ref : function(o,sp)
    {
        sp = sp?sp:"\n";
        var tem = [];
        for(var i in o) tem[tem.length]=i+":"+o[i];
        return tem.join(sp);
    }
});

 使用举例:

    1. a.xml

  

<?xml version="1.0" encoding="utf-8"?>
<root>
    <a id="t1" desc="just test">abc</a>
    <b id="t2"><![CDATA[
        <c>test</c>
    ]]></b>
</root>

   2. 调用

   

$(function(){
    $.get("a.xml",function(data){
        var json = $.z4x(data);//只需一步,即可变成json.
        alert($.ref(json));//反射json

        //alert($.ref(json.root));//继续反射,看看里面有什么
  });
})

 

是不是很简单啊,快试试吧。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值