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

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

2017-09-02 10:26 393 查看
相比其他格式,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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml javascript