在jquery中处理带有命名空间的XML数据


Posted in Javascript onJune 13, 2011

但不幸的是,很多服务返回的数据仍然是XML格式的。
jquery对于xml这种数据的处理是内置支持的,这一点没有任何问题。但前提是返回的数据没有带任何命名空间。例如下面这份数据

<?xml version="1.0" encoding="utf-8" ?> 
<data> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
<Employee id="1" firstName="ares" lastName="chen"></Employee> 
</data>

要处理这样的数据,jquery代码大致如下
var div = $("#placeholder"); 
// 处理不带命名空间的xml 
$.get("data.xml", null, function (data) { 
var employees = $("Employee", data); //找到所有的Employee节点 
var ul = $("<ul />"); 
employees.each(function () { 
$("<li />").text($(this).attr("firstName") + " " + $(this).attr("lastName")).appendTo(ul);// 将每一行数据构造一个新的li标签,并且将其插入到ul中 
}); 
ul.appendTo(div); 
});

但如果我们的XML数据带有命名空间,则上述代码就会无效。原因是因为jquery默认处理不了命名空间\
<?xml version="1.0" encoding="utf-8" ?> 
<data xmlns:d="http://tech.xizhang.com"> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
<d:Employee id="1" firstName="bill" lastName="gates"></d:Employee> 
</data>

为了解决这个问题,有热心的网友,编写了一个jquery插件,叫做jquery.xmlns.js,有兴趣可以通过下面了解和下载
http://www.rfk.id.au/blog/entry/xmlns-selectors-jquery/
那么,我们可以用如下的方法来解决问题
$.xmlns["d"] = "http://tech.xizhang.com"; 
// 处理带命名空间的xml 
$.get("datawithnamespace.xml", null, function (data) { 
var employees = $("d|Employee", data); //找到所有的Employee节点 
var ul = $("<ul />"); 
employees.each(function () { 
$("<li />").text($(this).attr("firstName") + " " + $(this).attr("lastName")).appendTo(ul); 
}); 
ul.appendTo(div); 
});

不得不说,XML这个技术规范中的命名空间真是一个很不好的设计。增加了很多麻烦,胜过于它带来的好处。
本文的例子完整代码如下
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script src="Scripts/jquery.xmlns.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript"> 
$(function () { 
var div = $("#placeholder"); 
// 处理不带命名空间的xml 
$.get("data.xml", null, function (data) { 
var employees = $("Employee", data); //找到所有的Employee节点 
var ul = $("<ul />"); 
employees.each(function () { 
$("<li />").text($(this).attr("firstName") + " " + $(this).attr("lastName")).appendTo(ul);// 将每一行数据构造一个新的li标签,并且将其插入到ul中 
}); 
ul.appendTo(div); 
}); 
$("<br />").appendTo(div); 
$.xmlns["d"] = "http://tech.xizhang.com"; 
// 处理带命名空间的xml 
$.get("datawithnamespace.xml", null, function (data) { 
var employees = $("d|Employee", data); //找到所有的Employee节点 
var ul = $("<ul />"); 
employees.each(function () { 
$("<li />").text($(this).attr("firstName") + " " + $(this).attr("lastName")).appendTo(ul); 
}); 
ul.appendTo(div); 
}); 
}); 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div id="placeholder"> 
</div> 
</form> 
</body> 
</html>

最后,在浏览器中看到的效果如下。有图有真相

在jquery中处理带有命名空间的XML数据

Javascript 相关文章推荐
IE DOM实现存在的部分问题及解决方法
Jul 25 Javascript
基于jQuery的倒计时插件代码
May 07 Javascript
原始的js代码和jquery对比体会
Sep 10 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
vue2.0移除或更改的一些东西(移除index key)
Aug 28 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
javascript使用substring实现的展开与收缩文字功能示例
Jun 17 Javascript
ES10的13个新特性示例(小结)
Sep 23 Javascript
jquery 与NVelocity 产生冲突的解决方法
Jun 13 #Javascript
用Juery网页选项卡实现代码
Jun 13 #Javascript
读jQuery之三(构建选择器)
Jun 11 #Javascript
读jQuery之二(两种扩展)
Jun 11 #Javascript
读jQuery之一(对象的组成)
Jun 11 #Javascript
基于jquery的无刷新分页技术
Jun 11 #Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 #Javascript
You might like
操作Oracle的php类
2006/10/09 PHP
php URL编码解码函数代码
2009/03/10 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
JQuery性能优化的几点建议
2014/05/14 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
简单了解Python3里的一些新特性
2019/07/13 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
公司市场部岗位职责
2013/12/02 职场文书
安全生产汇报材料
2014/02/17 职场文书
幼儿园老师寄语
2014/04/03 职场文书
给孩子的新年寄语
2014/04/08 职场文书
协议书范本
2014/04/23 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
2014司机年终工作总结
2014/12/05 职场文书
优秀大学生申请书
2019/06/24 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL