当前位置: 首页 > news >正文

[转]使用JQuery读取XML文件数据

通过 JQuery框架 空白HTML文档 加载

在开始之前我们需要做如下准备工作:

1.创建一个名为DEMO.html空白html文件;(推荐使用Editplus 3创建)

2.熟悉JQuery框架的基本语法;(不熟悉没关系,后面我会注释得很详细)

3.创建一个名为data.xml的XML文件用来存储数据,XML的结构下面会涉及到,你也可以下载我打包好的文件查看;

4.一个loading.gif图片,这个图片用于在将XML读取出来的等待时间里面显示在空白html文档中。

XML文件读取 的数据。我们将会主要用到JQuery自带函数 $.get 。

正式开始:/www.huyang8.com

Step 1: 首先 让我们看看这个data.xml的简单结构,我这里演示的数据是"Saturn为您推荐的几本书",故为书籍信息,那么xml就包括书籍的名称,缩略图和书籍描述信息;

<? xml version="1.0" encoding="utf-8" ?>
< books >
< book title ="藏地密码" imageurl ="images/Tibet_Code.jpg" >
< description >
这里是概况(www.huyang8.com)
</ description >
</ book >

< book title ="剑桥雅思6" imageurl ="images/ielts.jpg" >
< description >
这里是概况(www.huyang8.com)
</ description >
</ book >

< book title ="Professional ASP.NET" imageurl ="images/asp.jpg" >
< description >
这里是概况(www.huyang8.com)
</ description >
</ book >
</ books >
其次,让我们看看加载在空白HTML文档里面的JavaScript代码:
$(document).ready( function ()
...
... {
$.get(
' myData.xml ' , function (d)... ... {
$(
' body ' ).append( ' <h1> Saturn给你推荐几本书: </h1> ' );
$(
' body ' ).append( ' <dl /> ' );

$(d).find(
' book ' ).each( function ()... ... {

var $book = $( this );
var title = $book.attr( " title " );
var description = $book.find( ' description ' ).text();
var imageurl = $book.attr( ' imageurl ' );

var html = ' <dt> <img class="bookImage" alt="" src=" ' + imageurl + ' " /> </dt> ' ;
html
+= ' <dd> <span class="loadingPic" alt="Loading" /> ' ;
html
+= ' <p class="title"> ' + title + ' </p> ' ;
html
+= ' <p> ' + description + ' </p> ' ;
html
+= ' </dd> ' ;

$(
' dl ' ).append($(html));

$(
' .loadingPic ' ).fadeOut( 2000 );
}
);
}
);
);
Step 2: 这里,我只讲下JavaScript代码原理与运行流程,不过分讨论语法,如果你对语法有任何疑问,请给我留言或者查看JQuery相关文档。
  • 行1: 当HTML文档准备完毕之后(即html和JavaScript都下载完毕),会自动触发JQuery的 $(document).ready方法及里面的过程。显然,这里首先执行的是$.get方法。
  • 行3: $.get 的第一个参数是XML文件的相对路径(注意路径要填写正确,这里我们把XML和网页文件放在同一文件夹)。第二个参数是一个Callback函数,即回调 函数。就是说通过get方法来请求这个XML文件的内容,然后通过这个callback回调函数来操作里面的数据。而callback的参数d 表示从XML回调过来的所有数据,有了这个参数d ,我们就好进行下面的内容了
  • 行4: 通过JavaScript在文档的BODY中动态添加一个标签<h1>,这个是页面的总标题,无关紧要;
  • 行5: 同样在BODY中动态添加一个标签<dl>,用来作为包含循环下面的内容容器。(行20会用到)
  • 行7: 这一行很重要,因为我们已经说过,回调函数的参数d表示从XML回调的所有数据,现在我们就需要对这些数据进行处理(筛选)和格式化; 请注意:这里通过搜寻book标签(tag),然后循环执行each后面的函数,直到xml里面数据的条目完全循环完毕;(有点像PHP里面的foreach函数的功能)
  • 行9: $(this)实际上就创建一个对象,目的是将d的当前一条书籍信息对象实例化,方便进行操作,这就是$book;
  • 行10--行12: 分别获取当前对象$book的书籍名称,描述和缩略图;(注意取属性值和取节点值的语法不同)
  • 行14-行18: 格式化书籍信息,以便输出;
  • 行20: 将格式化后的信息以HTML输出方式输出到文档中。
  • 行22: 为了告诉用户我们当前的信息正在从XML中读取,2000毫秒(2秒)后,图片逐渐消失。

Step 3: 至此,大功告成。欢迎大家给我留言,共同讨论JQuery的开发和你所碰到的问题,请不吝赐教。 另外,请将下载后的文件夹放在WEB环境下运行(IIS或虚拟主机),请不要直接点开运行。

下面介绍一下正确用jQuery的AJAX加载XML并解析
1,Content-Type
很多时候无法解析就是Content-Type的问题。(呵呵,我第一次做ajax的时候,就遇到这个问题.)
一定要将其设置为text/xml,否则默认就是text/html也就是普通的文本了。

常见语言的Content-Type设置

header( " Content-Type:text/xml " ); // php
response.ContentType = " text/xml " // asp
response.setHeader( " ContentType " , " text/xml " ); // jsp (我上次这没写,结果返回 是一个 "" )

2,xml结构。
XML一定要封闭的,很重要! (这个我一般不会范,我还是算比较细心的.)

例:
错误的XML
<? xml version="1.0" encoding="UTF-8" ?>
< name > zhangsan </ name >
< id > 1 </ id >
< name > lisi </ name >
< id > 2 </ id >

正确的
<? xml version="1.0" encoding="UTF-8" ?>
< stulist >
< student mailto:1@1.com" target =_blank>1@1.com">
<name > zhangsan </ name >
< id > 1 </ id >
</ student >
< student mailto:2@2.com" target =_blank>2@2.com">
<name > lisi </ name >
< id > 2 </ id >
</ student >
</ stulist >

3,解析
遍历student(这里还是用上面那个XML,子节点是student)
$.ajax( ... {
url:
' ajax.jsp ' ,
type:
' GET ' ,
dataType:
' xml ' ,
timeout:
1000 ,
error:
function (xml) ... {
alert(
' Error loading XML document ' + xml);
}
,
success:
function (xml) ... {
$(xml).find(
" student " ).each( function (i) ... {
var id = $( this ).children( " id " ); // 取对象
var id_value = $( this ).children( " id " ).text(); // 取文本 或者 $("id" , xml).text();
alert(id_value); // 这里就是ID的值了。
alert($( this ).attr( " email " )); // 这里能显示student下的email属性。
$( ' <li></li> ' ).html(id_value).appendTo( ' ol ' );

} );
}

}
);

相关文章:

  • android安装
  • jQuery 读xml并search
  • IO模型介绍 以及同步异步阻塞非阻塞的区别
  • IDEA的查询引用、调用关系图的功能(转)
  • 【不抱怨21天】第一天 - The First Day
  • 201521123054《Java程序设计》第8周学习总结
  • DataTable与Xml的相互转化
  • 【转】C#三大特性之 封装、继承、多态
  • POJ3664
  • js不重复导入
  • 压缩文件函数库(转载)
  • 抽象类(abstract class)与接口(interface)
  • android 图片特效处理之锐化效果
  • 去除末尾字符
  • Bzoj4727--Poi2017Turysta
  • Asm.js的简单介绍
  • CSS3 变换
  • Cumulo 的 ClojureScript 模块已经成型
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js递归,无限分级树形折叠菜单
  • magento 货币换算
  • React as a UI Runtime(五、列表)
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 如何在 Tornado 中实现 Middleware
  • 深入浏览器事件循环的本质
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 新手搭建网站的主要流程
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 透过事物看本质的能力怎么培养?
  • #NOIP 2014# day.2 T2 寻找道路
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转) Android中ViewStub组件使用
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET delegate 委托 、 Event 事件
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net web项目 调用webService
  • .NET 读取 JSON格式的数据
  • .Net语言中的StringBuilder:入门到精通
  • .pop ----remove 删除
  • @EnableConfigurationProperties注解使用
  • [ 数据结构 - C++]红黑树RBTree
  • [100天算法】-x 的平方根(day 61)
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Android] Upload package to device fails #2720
  • [CSS]中子元素在父元素中居中
  • [ffmpeg] x264 配置参数解析
  • [ICCV2017]Neural Person Search Machines
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍