XML元素转化为JS对象

  Web客户端与服务器端传输对象,除了使用JSON之外,选择XML作为传输媒介也是比较常用的一种方法。但在JS脚本中,直接使用XML似乎有点麻烦,因此需要在JS对象与XML文档之间做一个简单转化。


  为了兼容大部分对象定义,XML文档采用如下形式传输:

<objects>

     <object>

          <field>

               <name>code</name>

               <value>201301</value>

          </field>

          <field>

              <name>name</name>

              <value>张三</value>

          </field>

          <field>

              <name>sex</name>

              <value>男</value>

          <field>

          </field>

              <name>birth</name>

              <value>1990-01-01</value>

          </field>

    </object>

</objects>

  这里object元素表示一个对象,对象中包含若干个field元素,每个field元素中的name与value分别表示该属性的名称和值。


  XML转化为JS对象代码如下:

        //将XML节点转化为数组对象<name><value>
        function parseNodesAsArray(nodes){
            var objs = new Array();
            if(nodes == null) return objs;
            for(var i = 0;i < nodes.length;i++){
                if(nodes[i] == null) continue;
                var nvnodes = nodes[i].selectNodes("field");
                if(nvnodes == null || nvnodes.length == 0) continue;
                var newObj = new Object();
                for(var j = 0;j < nvnodes.length;j++){
                    if(nvnodes[j] == null) continue;
                    var nnode = nvnodes[j].selectSingleNode("name");
                    var vnode = nvnodes[j].selectSingleNode("value");
                    var fieldName = GetNodeValue(nnode);
                    var fieldValue = GetNodeValue(vnode);
                    if(fieldName == null || fieldName.length == 0) continue;
                    newObj[fieldName] = fieldValue;
                }
                objs[objs.length] = newObj;
            }
            return objs;
        }


  调用时传入参数为object元素集合,如:var objs = parseNodesAsArray(xml.selectNodes("/objects/object"));。

  此外,GetNodeValue为另外一个获取属性的函数,如下:

var GetNodeValue = function(obj){
    var str = "";
    if(obj == null) return str;
    if(window.ActiveXObject){ //IE
        str = obj.text;
    }
    else{ //Mozilla, Firefox, etc.
        try{
            str = obj.childNodes[0].nodeValue;
        }catch(ex){
            str = "";
        }
        if(str == ""){
            try{
                str = obj.nodeValue;
            }catch(ex){
                str = "";
            }
        }
    }
    return str;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值