在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 相关文章推荐
JQuery中根据属性或属性值获得元素(6种情况获取方法)
Jan 17 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
jQuery Ajax使用实例
Apr 16 Javascript
js实现a标签超链接提交form表单的方法
Jun 24 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
JS实现字符串翻转的方法分析
Aug 31 Javascript
微信小程序使用gitee进行版本管理
Sep 20 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
Mar 15 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
原生js 实现表单验证功能
Feb 08 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
javascript中this的四种用法
2015/05/11 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
暑期实习鉴定
2013/12/16 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
利用Python多线程实现图片下载器
2022/03/25 Python