在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 相关文章推荐
JavaScript自执行闭包的小例子
Jun 29 Javascript
js中prototype用法详细介绍
Nov 14 Javascript
详解javascript事件冒泡
Jan 09 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
May 16 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
Mar 17 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
JS判断字符串是否为整数的方法--简单的正则判断
Jul 23 Javascript
简单分析js中的this的原理
Aug 31 Javascript
vue-cli随机生成port源码的方法
Sep 02 Javascript
VUE动态生成word的实现
Jul 26 Javascript
JavaScript Array.flat()函数用法解析
Sep 02 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
PHP 彩色文字实现代码
2009/06/29 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
简单实现node.js图片上传
2016/12/18 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
linux下安装easy_install的方法
2013/02/10 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
基于python实现学生管理系统
2018/10/17 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python中setuptools的作用是什么
2020/06/19 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
教师绩效工资方案
2014/02/01 职场文书
索桥的故事教学反思
2014/02/06 职场文书
超市开学活动方案
2014/03/01 职场文书
关于保护环境的建议书
2014/05/13 职场文书
机关作风建设心得体会
2014/10/22 职场文书
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang