在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 相关文章推荐
js+css在交互上的应用
Jul 18 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
Jan 15 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
js实现window.open不被拦截的解决方法汇总
Oct 30 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
Dec 24 Javascript
基于构造函数的五种继承方法小结
Jul 27 Javascript
canvas轨迹回放功能实现
Dec 20 Javascript
代码详解javascript模块加载器
Mar 04 Javascript
vue项目引入字体.ttf的方法
Sep 28 Javascript
图解JS原型和原型链实现原理
Sep 15 Javascript
详解JS数组方法
Nov 20 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通用检测函数集合
2011/02/08 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
python基础while循环及if判断的实例讲解
2017/08/25 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
python使用zip将list转为json的方法
2018/12/31 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
化工机械应届生求职信
2013/11/04 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
代理协议书范本
2014/04/22 职场文书
劳模先进事迹材料
2014/12/24 职场文书
建议书范文
2015/02/05 职场文书
编写python程序的90条建议
2021/04/14 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js