在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实现简单的拖拽效果实例兼容所有主流浏览器
Jun 21 Javascript
Js为表单动态添加节点内容的方法
Feb 10 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
Css3制作变形与动画效果
Jul 24 Javascript
微信小程序开发(二)图片上传+服务端接收详解
Jan 11 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
原生js实现放大镜
Feb 20 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
uni-app之APP和小程序微信授权方法
May 09 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
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 sprintf()函数用例解析
2011/05/18 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
Python创建文件和追加文件内容实例
2014/10/21 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
Python列表的切片实例讲解
2019/08/20 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
flask开启多线程的具体方法
2020/08/02 Python
如何利用python 读取配置文件
2021/01/06 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
NULL是什么,它是怎么定义的
2015/05/09 面试题
大学新闻系应届生求职信
2014/06/02 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
故意伤害辩护词
2015/05/21 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript