在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 关闭IE6、IE7
Jun 01 Javascript
Jquery操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
javascript实现延时显示提示框特效代码
Apr 27 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
JS验证input输入框(字母,数字,符号,中文)
Mar 23 Javascript
详解使用webpack打包编写一个vue-toast插件
Nov 08 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
JS实现滑动导航效果
Jan 14 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
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
js数组的操作详解
2013/03/27 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
js运动应用实例解析
2015/12/28 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
简明 Python 基础学习教程
2007/02/08 Python
python字典序问题实例
2014/09/26 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python调用webservice接口的实现
2019/07/12 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
Python常用编译器原理及特点解析
2020/03/23 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
民族团结先进个人材料
2014/02/05 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
员工自我评价范文
2015/03/11 职场文书
运动会宣传稿50字
2015/07/23 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
Win11快速关闭所有广告推荐
2022/04/19 数码科技