在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高级程序设计
Dec 29 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
js chrome浏览器判断代码
Mar 28 Javascript
JS延迟加载(setTimeout) JS最后加载
Jul 15 Javascript
js函数中onmousedown和onclick的区别和联系探讨
May 19 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
js验证上传图片的方法
May 12 Javascript
浅谈javascript中的三种弹窗
Oct 21 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
Mar 02 Javascript
使用FileReader API创建Vue文件阅读器组件
Apr 03 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
在vue中使用jsonp进行跨域请求接口操作
Oct 29 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
header跳转和include包含问题详解
2012/09/08 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
js的event详解。
2006/09/06 Javascript
JavaScript中的私有成员
2006/09/18 Javascript
javascript Keycode对照表
2009/10/24 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
js常用的继承--组合式继承
2017/03/06 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
python实现拓扑排序的基本教程
2018/03/11 Python
Python地图绘制实操详解
2019/03/04 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python 批量将中文名转换为拼音
2021/02/07 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
求职简历自我评价范例
2014/03/12 职场文书
励志演讲稿范文
2014/04/29 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python