JavaScript中的XML编程

上传人:m**** 文档编号:577930607 上传时间:2024-08-23 格式:PPT 页数:59 大小:1,003.50KB
返回 下载 相关 举报
JavaScript中的XML编程_第1页
第1页 / 共59页
JavaScript中的XML编程_第2页
第2页 / 共59页
JavaScript中的XML编程_第3页
第3页 / 共59页
JavaScript中的XML编程_第4页
第4页 / 共59页
JavaScript中的XML编程_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《JavaScript中的XML编程》由会员分享,可在线阅读,更多相关《JavaScript中的XML编程(59页珍藏版)》请在金锄头文库上搜索。

1、第10章 JavaScript中的XML编程 随着随着XML的流行,的流行,JavaScript开发人员开发人员也迫切希望在客户端也迫切希望在客户端Web开发中应用开发中应用XML。 目前的主流浏览器已经提供了对目前的主流浏览器已经提供了对XML的支持,本章将介绍如何在的支持,本章将介绍如何在JavaScript中使中使用浏览器提供的用浏览器提供的XML编程特性。编程特性。 本章将主要讨论本章将主要讨论Mozilla Firefox和和Internet Explorer这两种浏览器中的这两种浏览器中的XML编编程方法。程方法。 XML基础10.1 浏览器中的XML DOM10.2 浏览器中的X

2、Path10.3 浏览器中的XSLT10.410.1 XML基础 XML即即 可可 扩扩 展展 标标 记记 语语 言言 ( Extensible Markup Language),是是一一种种平平台台无无关关的的表表示示数数据的方法。据的方法。 使使用用XML创创建建的的数数据据可可以以被被任任何何应应用用程程序序在在任任何何平平台台上上读读取取,甚甚至至可可以以通通过过手手动动编编码码来来编编辑辑和和创创建建XML文文档档,因因为为XML与与HTML一一样样,都都是基于文本的标记语言。是基于文本的标记语言。 XML在在数数据据的的表表示示方方面面具具有有很很好好的的灵灵活活性性和和可可扩扩展

3、展性性,例例10-1是是一一个个XML的的示示例例,它它描描述述了了员工的基本信息。员工的基本信息。【例例10-1】 employees.xml Tom Black M 30 03 C+ Java Bill Gates M 40 01 VB 10.1.1 XPath简介 XML可可以以处处理理多多种种数数据据,因因此此必必须须有有一一种种在在XML文文档档中中定定位位数数据据的的方方式式,这这就就是是XPath,它它专专门门用用于于在在XML中中进进行行定定位位匹配。匹配。 本本节节将将对对XPath进进行行简简要要介介绍绍,更更深深入入的讨论请读者参考相关文档。的讨论请读者参考相关文档。 每

4、每个个XPath表表达达式式由由两两部部分分组组成成:上上下下文节点和节点模式。文节点和节点模式。 上下文节点提供了节点模式起始的位置。上下文节点提供了节点模式起始的位置。 节节点点模模式式是是由由一一个个或或者者多多个个节节点点选选择择器器组成的字符串。组成的字符串。 例例如如,考考虑虑对对例例10-1中中的的XML文文档档使使用用如下的如下的XPath表达式:表达式:Employee/Name/FirstName 如如果果上上下下文文节节点点是是XML文文档档的的根根节节点点,那那么么该该XPath表表达达式式匹匹配配了了Tom和和Bill这两个节点。这两个节点。 其其中中Employee

5、、Name和和FirstName是是XML文档中的元素名称。文档中的元素名称。 我我们们可可以以在在XPath中中增增加加方方括括号号对对选选择择的节点进行限制。的节点进行限制。 例例如如需需要要选选择择年年龄龄大大于于35岁岁的的雇雇员员名名字字,可可以修改以修改XPath表达式如下:表达式如下:EmployeeAge35/Name/FirstName 上上 面面 的的 XPath表表 达达 式式 匹匹 配配 的的 节节 点点 是是Bill,仅仅包包含含了了年年龄龄大大于于35岁的雇员名字。岁的雇员名字。 XPath还还支支持持使使用用符符号号匹匹配配XML文文档档中中的的属属性,例如下面的

6、性,例如下面的XPath匹配了匹配了id为为001的雇员名字。的雇员名字。Employeeid=001/Name/FirstName XPath是是一一种种非非常常强强大大的的表表达达式式,使使用用它它可可以很容易地在以很容易地在XML文档中查找指定的节点。文档中查找指定的节点。10.1.2 XSLT简介 XSLT(可可扩扩展展样样式式表表语语言言转转换换)是是XML的的姊姊妹妹语语言言,它它可可以以将将XML转转换换为为任任何何基基于于文文本本的的形式。形式。 很很多多应应用用中中使使用用它它将将XML转转换换为为HTML,当当然然,这这只只是是XSLT的的一一种种用用途途。XSLT样样式式

7、表表由由一一些模板组成,这些模板决定了输出文本的格式。些模板组成,这些模板决定了输出文本的格式。 仍仍然然考考虑虑例例10-1中中的的XML文文档档,现现在在我我们们希希望望将将雇雇员员的的id和和全全名名(FirstName+LastName)在在HTML页面中输出。格式如例页面中输出。格式如例10-2所示。所示。【例例10-2】 Employees.html10.2 浏览器中的XML DOM 目目前前只只有有两两个个浏浏览览器器支支持持客客户户端端的的XML处理,它们是处理,它们是IE和和Mozilla浏览器。浏览器。 下下面面将将分分别别介介绍绍在在这这两两种种浏浏览览器器中中进进行行X

8、ML DOM处理的方法。处理的方法。10.2.1 IE中的XML DOM 在在为为IE添添加加XML编编程程特特性性时时,微微软软选选择了基于择了基于ActiveX技术的技术的MSXML库。库。 它它是是微微软软开开发发的的XML开开发发程程序序库库,可可以在以在VB、C+等多种语言中使用。等多种语言中使用。 在在JavaScript中中可可以以通通过过ActiveXObject类创建类创建ActiveX对象。对象。 IE 4.0以以及及更更低低版版本本IE的的客客户户端端必必须须单单独独安安装装MSXML库库,才才能能使使用用XML编编程程相相关关的的功功能能,IE 5.0及及更更高高版版本

9、本的的IE则则集集成成了了MSXML库库,并并将将其其中中的的ActiveX控控件件设设置置为为安安全全控控件件,使使之之不不受受浏浏览览器器安安全全性性设设置置的影响。的影响。 使使用用XML DOM进进行行XML解解析析时时,必必须须解解决决的的问问题题包包括括:创创建建DOM对对象象并并加加载载XML文档、文档、XML节点操作和异常的处理。节点操作和异常的处理。1创建XML文档对象 MSXML库存在多个版本,每个版本具有不库存在多个版本,每个版本具有不同的对象注册名,而我们不能确定用户安装的同的对象注册名,而我们不能确定用户安装的MSXML库版本,在很多情况下客户端还可能安库版本,在很多

10、情况下客户端还可能安装了多个版本的装了多个版本的MSXML库。库。 通常的策略是尽可能地使用最新的版本,从通常的策略是尽可能地使用最新的版本,从而获取更高的执行效率和稳定性。而获取更高的执行效率和稳定性。 使用例使用例10-4所示的所示的createDocument函数函数可以满足要求,它将依次尝试创建以下版可以满足要求,它将依次尝试创建以下版本的本的ActiveX控件,直到创建成功为止,如控件,直到创建成功为止,如果果createDocument函数返回函数返回false,说明客户,说明客户端未安装端未安装MSXML或者浏览器不是或者浏览器不是Windows平台的平台的IE(Mac平台的平台

11、的IE不支持不支持ActiveX控控件)。件)。 以下列出了各种版本以下列出了各种版本MSXML库的库的DOM对象注对象注册名。册名。(1)MSXML2.DOMDocument.6.0(2)MSXML2.DOMDocument.5.0(3)MSXML2.DOMDocument.4.0(4)MSXML2.DOMDocument.3.0(5)MSXML2.DOMDocument(6)Microsoft.DOMDocument【例例10-4】 创建创建DOM对象对象2加载XML文档 MSXML的的DOMDocument对对象象可可以以使使用用load方方法法加加载载一一个个指指定定的的URL,也也可

12、可以以使使用用loadXML方法加载方法加载XML的文本内容。的文本内容。 当当使使用用load方方法法加加载载XML文文档档时时,有有同步和异步两种模式。同步和异步两种模式。 在同步模式下需要将在同步模式下需要将DOMDocument对象的对象的async属性设置为属性设置为false,这样通过该这样通过该对象的对象的load方法加载方法加载XML时,程序会一直时,程序会一直等待直到等待直到XML文档加载完成。文档加载完成。 / 创建创建DOMDocument对象对象var doc = createDocument();/ 设置为同步模式设置为同步模式doc.async = false;/

13、加载加载XMLdoc.load(books.xml); 一一般般来来说说,由由于于网网络络延延时时、应应用用程程序序处处理理等等因因素素,加加载载XML的的过过程程必必然然会会存存在在一一定定的的延延时时,使使用用同同步步模模式式往往往往导导致致浏浏览览器器在在等等待待XML数数据据返返回回的的过过程程中中失失去去响响应应, 因因此此在在大大多多数数情情况况下下建建议议使使用用异异步步模模式式,这这也也是是DOMDocument对对象象默默认认的的文文档档加加载载方法。方法。 例例10-5所所示示是是使使用用异异步步模模式式加加载载XML文文档的示例代码。档的示例代码。【例例10-5】 加载加

14、载XML文档文档【例例10-6】 加载加载XML文档文档 3访问XML节点 DOMDocument对对象象对对应应于于DOM标标准准中中的的Document接接口口,因因此此DOMDocument对对象象可可以以使使用用标标准准的的DOM方方法法进进行行XML节节点点操操作作,DOMDocument对对象象的的常常用用属属性性如如表表10-1所示。所示。 其其中中text和和xml两两个个属属性性是是微微软软对对DOM标标准准的的扩扩展展,分分别别用用于于返返回回节节点点的的文文本本内内容和容和XML文本。文本。表10-1DOMDocument对象常用属性属 性 名 称含 义attribute

15、s所有属性节点的列表childNodes所有的子节点firstChild第一个子节点属 性 名 称含 义lastChild最后一个子节点previousSibling上一个兄弟节点nextSibling下一个兄弟节点parentNode父节点documentElement文档的根节点nodeName节点名称nodeType节点类型nodeValue节点值ownerDocument节点所在的文档对象text节点的文本内容xml节点的XML文本【例例10-7】 books.xml 表10-2 DOMDocument对象常用方法方 法 名 称含 义appendChild将节点作为最后一个子节点附加到

16、父节点中cloneNode创建节点的副本createAttribute创建属性节点createCDATASection创建CDATA节点createComment创建注释节点createDocumentFragment创建文档片段createElement创建元素节点createEntityReference创建实体引用节点createNode根据指定的名称、类型和命名空间创建节点createProcessingInstruction创建处理指令节点createTextNode创建文本节点getElementsByTagName根据指定的节点名称返回元素的集合hasChildNodes判断节点

17、是否具有子节点insertBefore将节点插入到指定的子节点之前nodeFromID根据ID返回指定的节点removeChild删除指定的子节点replaceChild替换指定的子节点save将XML文档保存到指定的位置4异常处理 在加载在加载XML文档的过程中,无论使用文档的过程中,无论使用load方法还是方法还是loadXML方法,都有可能发方法,都有可能发生生XML格式不正确的情况。格式不正确的情况。 表10-3parseError对象属性属 性 名 称含 义errorCode错误码,errorCode不等于零说明有异常发生filepos引发异常的代码在文件中所处的绝对位置lineXM

18、L文档中错误所在的行号lineposXML文档中错误在行内的位置reason导致异常的原因srcTextXML文档中错误所在行的文本内容urlXML文档的URL【例例10-8】 XML DOM异常处理异常处理 10.2.2 Mozilla中的XML DOM 与与IE的的做做法法不不同同,Mozilla浏浏览览器器将将XML DOM作作为为其其JavaScript实实现现的的一一部部分分,因因此此Mozilla浏浏览览器器中中的的XML特特性性可可以以在在各各个个 平平 台台 的的 Mozilla浏浏 览览 器器 中中 使使 用用 , 而而 且且Mozilla的的XML DOM实实现现了了对对D

19、OM Level 2的支持。的支持。1创建XML文档对象 在在Mozilla浏浏览览器器中中创创建建XML文文档档对对象象的方法如下所示:的方法如下所示:document.implementation.createDocument(namespaceURI, rootname, doctype)2加载XML文档 在在Mozilla中中也也可可以以使使用用load方方法法加加载载指指定定URL的的XML文文档档,默默认认情情况况下下它它采采用用异异步步加加载载模模式。式。 如如果果需需要要采采取取同同步步的的模模式式加加载载XML文文档档,那那么必须将么必须将DOM对象的对象的async属性设置

20、为属性设置为false。 Mozilla中中的的XML文文档档对对象象在在加加载载XML的的过过程中不存在程中不存在readyState属性从属性从1到到4的变化。的变化。 当当文文档档加加载载完完成成之之后后,DOM对对象象将将被被触触发发load事事件件,通通常常在在load事事件件的的处处理理函函数数中中进进行行XML文档的处理,如例文档的处理,如例10-9所示。所示。【例例10-9】 加载加载XML文档文档【例例10-10】 加载加载XML字符串字符串3访问XML节点 Mozilla对对 XML DOM的的 实实 现现 是是 完完 全全 符符 合合DOM标标准准的的,因因此此表表10-

21、1和和表表10-2中中列列举举的的绝绝大大多多数数属属性性和和方方法法都都可可以以在在Mozilla浏浏览览器器中中使使用用,调用方法也是相同的。调用方法也是相同的。 需需要要特特别别说说明明的的是是,text和和xml这这两两个个属属性性,它它们们是是微微软软对对DOM标标准准的的扩扩展展,因因此此Mozilla浏浏览览器不支持它们。器不支持它们。 但但是是在在Mozilla中中可可以以通通过过其其他他的的方方式式实实现现类类似的功能。似的功能。 以以下下的的getText方方法法将将会会返返回回节节点点中中的的文文本本内内容容,该该方方法法通通过过递递归归方方式式遍遍历历了了节节点的所有叶

22、子节点。点的所有叶子节点。 在在Mozilla中中需需要要特特别别注注意意的的问问题题是是空空白白文文本本节节点点也也会会被被遍遍历历,这这里里需需要要将将nodeValue(节节点点值值)使使用用trim函函数数进进行行处处理,如例理,如例10-11所示。所示。【例例10-11】 序列化序列化XML节点(普通文本)节点(普通文本)【例例10-12】 序列化序列化XML节点(节点(XML格式)格式) 4异常处理 Mozilla中中提提供供了了相相应应的的机机制制对对加加载载XML时时可可能能发发生生的的异异常常进进行行处处理理,与与IE不不同同,当当发发生生异异常常时时Mozilla会会通通过

23、过XML文文档档对象加载一个包含错误信息的对象加载一个包含错误信息的XML文档。文档。 例例如如将将books.xml稍稍作作修修改改,使使其其格格式式不正确,如例不正确,如例10-13所示。所示。10.3 浏览器中的XPath10.3.1 IE中的XPath 在在IE中中使使用用XPath非非常常简简单单,直直接接使使用用selectNodes或或者者selectSingleNode方方法法即即可可进行进行XPath查询。考虑以下的查询。考虑以下的XML文档:文档:10.3.2 Mozilla中的XPath Mozilla中中 XPath的的 实实 现现 方方 式式 是是 符符 合合DOM

24、Level 3中中关关于于XPath的的接接口口定定义义的的,尽尽管管IE的的selectNodes方方法法十十分分直直观观,但但Mozilla的方式可以实现更加强大的功能。的方式可以实现更加强大的功能。 在在Mozilla中中进进行行XPath查查询询需需要要使使用用两两个个 关关 键键 的的 对对 象象 : XPathEvaluator和和XpathResult。 它它们们分分别别用用于于执执行行XPath查查询询和和保保存存查查询结果。询结果。【例例10-14】 Mozilla浏览器中的浏览器中的XPath查询查询表10-4XPath结果集类型定义常 数值含 义ANY_TYPE0结果集包

25、含XPath查询获取的任何类型的节点,注意当结果集为DOM节点集合时,ANY_TYPE 相当于UNORDERED_ NODE_ITERATOR_TYPE续表常 数值含 义NUMBER_TYPE1结果集为单个数字时使用该类型,例如使用count函数的XPath表达式STRING_TYPE2结果集为单个字符串时使用该类型BOOLEAN_TYPE3结果集为单个布尔值时使用该类型,例如使用not函数的XPath表达式UNORDERED_NODE_ITERATOR_TYPE4结果集为DOM节点集合,节点在结果集中出现的顺序不一定和它们在XML文档中的顺序一致ORDERED_NODE_ITERATOR_T

26、YPE5结果集为DOM节点集合,节点在结果集中出现的顺序和它们在XML文档中的顺序一致UNORDERED_NODE_SNAPSHOT_TYPE6结果集为DOM节点集合的快照(即在执行evaluate方法之后该集合的内容不会因XML文档中节点的变化而变化),节点在结果集中出现的顺序不一定和它们在XML文档中的顺序一致ORDERED_NODE_SNAPSHOT_TYPE7结果集为DOM节点集合的快照,节点在结果集中出现的顺序和它们在XML文档中的顺序一致ANY_UNORDERED_NODE_TYPE8如果存在与XPath匹配的节点,结果集中仅包含一个DOM节点,该节点不一定是第一个符合条件的节点F

27、IRST_ORDERED_NODE_TYPE9如果存在与XPath匹配的节点,结果集中仅包含一个DOM节点,它是第一个符合条件的节点【例例10-15】 books_ns.xml 【例例10-16】 命名空间解析函数命名空间解析函数 【例例10-17】 Mozilla中的中的XPath查询查询 10.4 浏览器中的XSLT 显显然然,IE和和Mozilla的的XSLT实实现现机机制制也也是是不不同同的的,IE使使用用基基于于ActiveX对对象象的的解解决决方方案案,而而Mozilla则使用其内置的则使用其内置的XSLTProcessor对象。对象。10.4.1 IE中的XSLT IE中中提提供

28、供了了两两种种不不同同的的方方式式进进行行XSLT转转换换:使用使用DOMDocument和和XSLTemplate对象。对象。 例例10-18和和例例10-19是是本本节节将将要要使使用用的的XML文文档(档(books.xml)和)和XSLT样式表(样式表(books.xsl)。)。【例例10-18】 books.xml【例例10-19】 books.xsl 1基于DOMDocument的XSLT转换 如如果果XSLT转转换换只只需需进进行行一一次次,以以后后不不会会再再使使用用同同一一个个XSLT样样式式表表,那那么么使使用用DOMDocument对象的对象的transformNode方

29、法是最简单直接的。方法是最简单直接的。 具具体体步步骤骤是是首首先先分分别别加加载载XML文文档档和和XSLT样样 式式 表表 , 然然 后后 调调 用用 DOMDocument对对 象象 的的transformNode方方法法,该该方方法法的的输输入入参参数数是是与与XSLT样样式式表表对对应应DOMDocument对对象象,例例10-20所示是具体的实现代码。所示是具体的实现代码。【例例10-20】 基于基于DOMDocument的的XSLT转换转换2基于XSLTemplate的XSLT转换 MSXML还还提提供供了了另另一一个个对对象象用用于于XSLT转转换换,它它就就是是XSLTemp

30、late,使使用用它它进行进行XSLT转换的步骤如下:转换的步骤如下:(1)创建)创建DOM对象并且加载对象并且加载XML文档;文档;(2)创创建建DOM对对象象并并且且加加载载XSLT样样式式表表,需需要要特特别别注注意意的的是是,为为了了在在XSLTemplate对对象象中中使使用用样样式式表表,必必须须创创建建线线程程安安全全的的DOM对对象象,它它对对应应于于MSXML库库中中的的另另一一个个ActiveX控件;控件;(3)创创建建XSLTemplate对对象象,并并且且将将其其stylesheet属属性性设设置置为为XSLT样样式式表表的的DOM对象;对象;( 4) 通通 过过 XS

31、LTemplate对对 象象 创创 建建XSLProcessor对对象象,并并且且将将其其input属属性性设设置为置为XML文档的文档的DOM对象;对象;(5)调调用用XSLProcessor对对象象的的transform方法执行方法执行XSLT转换。转换。具体的实现代码如例具体的实现代码如例10-21所示。所示。【例例10-21】 基于基于XSLTemplate的的XSLT转换转换【例例10-22】 books.xsl 【例例10-23】 books.xsl 10.4.2 Mozilla中的XSLT Mozilla中中 进进 行行 XSLT转转 换换 的的 核核 心心 对对 象象 是是XS

32、LTProcessor,它它类类似似于于IE中中的的XslProcessor对对象,使用它进行象,使用它进行XSLT转换的基本步骤如下:转换的基本步骤如下:(1)创建)创建DOM对象加载对象加载XML文档和文档和XSLT样式样式表;表;(2)创建)创建XSLTProcessor对象,导入对象,导入XSLT样式表样式表(importStylesheet方法);方法);(3)执行样式转换()执行样式转换(transformToDocument或者或者transformToFragment方法)。方法)。 例例10-24所所示示是是将将books.xml和和books.xsl进行进行XSLT转换的示

33、例代码:转换的示例代码:【例例10-24】 Mozilla中的中的XSLT转换转换 例例10-24所所示示是是将将books.xml和和books.xsl进行进行XSLT转换的示例代码:转换的示例代码:【例例10-24】 Mozilla中的中的XSLT转换转换(a)图册模式(每行显示5张图片) (b)图册模式(每行显示3张图片) (c)幻灯片模式图10-1 多种查看方式的相册 【例例10-25】 album.html(HTML部分)部分) 【例例10-26】 album.html(JavaScript部分)部分) 【例例10-27】 photos.xml 【例例10-28】 template1

34、.xsl 【例例10-29】 template2.xsl 【例例10-30】 XsltTransform函数函数 小 结 本本章章首首先先对对XML以以及及相相关关的的XPath和和XSLT技技术术作作了了简简单单介介绍绍,然然后后分分别别介介绍绍了了IE和和Mozilla中中XML编编程程特特性性,并并且且通通过过示示例例说说明明了了它它们们的的使使用用方法。方法。 IE提提供供的的基基于于ActiveX控控件件的的解解决决方方案案在在使使用用时时比比较较方方便便,而而Mozilla的的方方式式更更加加接接近近标标准准,功能更强大,但是使用方法比功能更强大,但是使用方法比IE复杂得多。复杂得多。 本章介绍的方法只能在本章介绍的方法只能在IE和和Mozilla浏览器中浏览器中使用,对于其他的浏览器,可以考虑使用使用,对于其他的浏览器,可以考虑使用Google AJAXSLT脚本库(脚本库(http:/goog-),),它完全基于字符串的处它完全基于字符串的处理实现了对理实现了对XML DOM、XPath和和XSLT的支持。的支持。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号