- 3
- 0
- 约3.18千字
- 约 12页
- 2017-08-14 发布于河南
- 举报
第7章 JavaScript中的XML 在Ajax开发中,大量使用XML来装载服务器数据与客户端进行交互。XML不受语言、平台、系统的限制,可以进行几乎无限的数据传输,本章主要讲解如何使用JavaScript解析XML并加以显示。 7.1 XML DOM对象的支持 XML DOM与HTML DOM都是由W3C制定的统一标准,由各大浏览器厂商进行实现。但是出于商业原因,各大浏览器厂商对XML DOM的实现不近相同,带来了很多解析XML DOM的兼容性问题。笔者私自认为XML DOM基本支持是一致的,只是有些细节处理不同。但是为了读者可以进行更好的跨浏览器开发,本节将展示XML DOM对象在两大主要浏览器中的支持情况。 7.1.1 IE中的XML DOM支持 虽然XML可以超越系统与语言的隔阂,但是IE和Firefox对于XML DOM的支持还是不尽相同。本节将对IE和Firefox中对XML DOM的支持情况一一讲解。 在IE实现XML DOM支持时,微软采用了其在浏览器对象实现的一贯手段,微软将XML DOM作为ActiveX组件进行实现。微软提供了ActiveX控件形式的MSXML库,MSXML可以使用在任何基于Windows的开发平台上。 微软在IE的JavaScript中内置了创建ActiveX对象的ActiveXObject类。ActiveXObject对象只有1个参数,即需要实例化ActiveX对象的键名。例如创建XML DOM对象可以使用以下代码: function createXmlDom() { var xmlDom=new ActiveXObject(Microsoft.XmlDom);!--通过ActiveX对象的键值实例化对象-- return xmlDom; } 7.1.2 Firefox中的XML DOM支持 Firefox作为开源浏览器中的翘楚,坚决遵循DOM规范,而且Firefox的XML DOM实现了支持DOM Level 2的功能。 1.Firefox中使用XML DOM 2.在Firefox中使用loadXML()方法 在装载XML文档中,会遇到格式错误等问题。Firefox中XML DOM对象并不支持parserError属性,Firefox中的XML DOM会在出现错误的文档添加parsererror /节点,所以要判断是否在解析过程中出现了错误,必须测试文档元素的标签名。 7.2 XPath的支持 XPath是一种能够在XML文档中寻找信息的语言。它通过XML文档中的元素和属性来进行导航。基本的XPath语法类似于在1个文件系统中定位文件,很像Windows中的文件路径。XPath唯一的作用是寻找XML文档中特定元素的位置。 在本节中,将简要介绍XPath,然后介绍XPath在两大浏览器支持的情况,为日后解析XML文档打下良好的基础。 7.2.1 什么是XPath XPath是由W3C定义,专门用于查找XML文档中节点位置的语言。XPath表达式很像文件路径。首先来看1个简单的XML文档: ?xml version=1.0 encoding=utf-8? A B C/C /B /A 7.2.2 IE中的XPath支持 微软在实现任何技术时,总是喜欢进行完美的封装,让开发者省却了很多基础支持的实现。在XPath的实现上,微软保持了完美封装的习惯。微软实现XML DOM时,为每个XML Node(XML节点)都实现了用于获取匹配XPath表达式的方法:selectNodes()、selectSingleNode()。 还是沿用上节中最后的XML数据,现在需要查找Skills元素中Skill元素,代码如下所示。 var skill=xmlDom.documentElement.selectNodes(Writer/Skills/Skill); 注意这里返回的所有符合XPath表达式的节点列表,可以迭代这个节点列表: for(var i=0;iskill.length;i++) { alert(skill[i]); } 7.2.3 Firefox中的XPath支持 Firefox由于是一款开源浏览器,所以必须严格遵循标准。Firefox大部分实现了DOM Level 3附加标准DOM Level 3 XPath,但是Firefox中操作XPath的方式显得非常复杂和繁琐。 1.FireFox处理XPath 2.使用XPathResult模拟IE处理XPath 在Firefox中,操作XPath相对IE更强大,也更加的复杂。但是作为开发者还是要首先保证IE的使用,而后再考虑Firefox用户的使用。在功能实现的前提下,实现兼容Firefox。 7.3 浏览器对XSLT的
原创力文档

文档评论(0)