javascript把特定XML响应解析成一个对象

相比其他格式,XML极其冗长。每个单独的数据片段都依赖大量结构,所以有效数据的比例非常低。而且XML的语法有些模糊。当把一个数据结构转换成XML时,你应该把对象参数放到对象元素的属性中,还是放在独立的子元素中呢?你应该使用描述清晰的长标签名还是高效但难以辨认的短标签名呢?语法的解析过程同样含混,你必须提前知道XML响应的布局,然后才能弄清楚它的含义。

一般情况下,解析XML需要占用Javascript程序员一部分的精力。除了要提前知道详细结构之外,还必须确切地知道如何解析这个结构并费力地将它重组到Javascript对象中。这既非易事业不能自动完成。

例:

XML结构:

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<users total="4">
    <user id="1">
           <username>alice</username>
           <realname>Alice Smith</realname>
           <email>alice@alicesmith.com</email>
    </user>
    <user id="2">
           <username>bob</username>
           <realname>Bob Jones</realname>
           <email>bob@bobjones.com</email>
    </user>
    <user id="3">
           <username id="3">
           <username>carol</username>
           <realname>Carol Williams</realname>
           <email>Carol@carolwilliams.com</email>    
    </user>
    <user id="4">
           <username>dave</username>
           <realname>Dave Johnson</realname>
           <email>dave@davejohnson.com</email>
    </user>
</users>
复制代码

Javascript结构:

复制代码
function parseXML(responseXML){
    var users = [];
    var userNodes = responseXML.getElementsByTagName('users');
    var node,usernameNodes,usernameNode,username,realnameNodes,realnameNode,realname,emailNodes,emailNode,email;
    for(var i=0,len = userNodes.length;i<len;i++){
        node = userNodes[i];
        username = realname = email = "";
        usernameNodes = node.getElementsByTagName('username');
        if(usernameNodes && usernameNodes[0]){
            usernameNode = usernameNodes[0];
            username = (usernameNodes.firstChild)?usernameNodes.firstChild.nodeValue : "";
        }
        realnameNodes = node.getElementsByTagName('realname');
        if(realnameNodes && realnameNodes[0]){
            realnameNode = realnameNodes[0];
            username = (realnameNodes.firstChild)?usernameNodes.firstChild.nodeValue : "";
        }
        emailNodes = node.getElementsByTagName('email');
        if(emailNodes && emailNodes[0]){
            emailNode = emailNodes[0];
            email  = (emailNodes.firstChild)?emailNodes.firstChild.nodeValue : "";
        }
        user[i] = {
            id:node.getAttributte('id');
            username:username;
            realname:realname;
            email:email;
         };
    }   
    return users;
}
复制代码

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值