admin 管理员组

文章数量: 1086019


2024年4月19日发(作者:项目源码下载)

经验交 

支持多浏览器读取XML内容的方法实现 

陈春艳 

(广州市市政职业学校经济与管理部,广东广州 510500) 

[摘要]XML(可扩展标记语言)因为其轻便简洁、结构严谨、跨平台支持等多种特性,现已广泛地应用 

序的数据存储、数据交换当中。但不同的浏览器对XML文档的处理方法并不完全一致。介绍了IE和Fire ̄ox两 

读取XNIL文件的方法,并简单分析了两种浏览器的区别,提出了在W3C标准下重新构造一些通用方法,从而 

差异而引致的重复代码的劳动。 

[关键词]XML;浏览器;W3C;读取;DOM 

所不: 

1.引言 

<classes> 

XML(可扩展标记语言)因为其轻便简洁、结构严谨、跨 

<class><title>Web编程</title></class> 

平台支持等多种特性,现已经广泛地应用于各种应用程序 

<elass><title>JavaScript实例分析</title></class> 

的数据存储、数据交换当中。B/S结构的应用程序都普遍使 

</classes> 

用XML语言传输数据。特别在对web Service进行调用时, 

在访问XML的数据内容时,通常有两种方法。第~种 

其返回结果必然为XML格式的内容。 

方法是遍历法。因为XML文档的内容结构是一棵有着众多 

可是XML的设计目的是用来传送及携带数据信息,不 

节点的树,因此可以通过逐层遍历的方式,从父元素节点一 

是用来表现或展示数据,因此单纯的XML并没有规定如何 

直访问到最终的叶子元素节点,通过叶子元素节点的test属 

显示数据。虽然可以在定义XML文件的时候,使用CSS、 

性得到其文本节点的内容。可通过以下代码得到第一个 

XSLT等方式规定XML内容的布局与呈现;但在B/S结构 

class的title元素的文本内容。 

的web应用中,特别是Web Sevrice的调用返回时,由于考 

var rootNode:xmlDocument.documentElement: 

虑到网络传送的问题,往往都只是纯粹的XML文本;这就 

vat elassNode=rootNode.firstChild;//得到第一个class元 

只能依靠客户端脚本呈现文本内容。 

素节点 

在AJAX应用模型中,通常利用XMLHttpRequest对象 

var titleNode=classNode.firstChild//得到class下的title 

发送服务器请求,若服务器端返回的数据是XML格式,则 

元素节点 

通过XMLHt ̄Request对象的ResponseXML属性获得返回 

var titleText:titleNode.text;//得到title的文本内容 

数据。在主流的浏览器中,所获得的ResponseXML内容存在 

alert(titleText)://输出Web编程 

定的差异,而且不同浏览器所定义的XML DOM也各有 

如果利用节点访问的方式,可以通过nextSibling属性返 

千秋。这样使得客户端编程的程序员难以只用一种方法直 

接将XML的数据呈现在不同的浏览器中,这大大增加了 

回当前节点的下一个兄弟节点。由于IE浏览在构造XML 

内容节点的时候,某父节点下的所有子节点是利用一个数组 

Web应用开发的难度和开发时间。 

存储的。因此可以利用节点的索引得到需要的子节点内容。 

2.IE与Firefox对ResponseXML处理的差异 

可通过以下代码可跳过第一个class节点得到第二个class 

微软的IE在个人电脑用户浏览器的使用份额中占有比 

的内容。 

较大的优势,达到60.65%,其次是使用Mozilla内核的 

var rootNode=xmlDocument.documentElement: 

FireFox浏览器,达到24.52%(注:来自Net Applications公司 

var classNode=rootNode.childNodes[1】;//得到第二个class 

2010年3月的调查数据)。两大主流浏览器之间,对于服务 

元素节点 

器端返回ResponseXML对象从内容到操作对象都有很显著 vat titleNode=classNode.childNodes[0];//得到class下的 

的区别。 

title元素节点 

IE浏览器所得到的ResponseXML对象与实际的XML 

var titleText:titleNode.text;//得到title的文本内容 

内容比较一致,而且可以通过名为xml的属性得到包括 

alert(titleText);//输出JavaScript实例分析 

XML声明在内的全部内容。可通过代码如alert(XHR. 

第二种方法是按照元素名称直接访问法。通过getEle. 

ResponseXML.xm1)访问全部的XML内容。 

mentByld的方法,可以得到全部元素名相同的节点。该方法 

假设现有ResponseXML对象得到的内容部分节点如下 

所返回的是一个节点数组,通过循环遍历数组中的元素则可 

作者简介:陈春艳,女,海南文昌人,硕士,讲师、软件设计师,研究方向:操作系统、计算机网络、电子商务等。 

71— 

总数为4而不是2。 

国d odes 【<TextNodetextContent= 、n‘} c泌sl,<TextNodete ̄tContent=。、n’》 4more~1 

蕊B<TextNo,detegtConte ̄= 、n‘’ 

围1 c}as5 

图2 《T州NOdete ̄'tContent=-、n。> 

国3 c}35 

图1 Firefox中的节点信息 

此外,在Firefox中并不存在一些IE特有的方便访问 

XML内容的方法。如上文提及的xml和text属性。因此,上 

面在IE中可以成功访问XML内容的代码全部失效,程序 

员不得不为Firefox的用户重新写一遍读取的方法。以下代 

码演示读取第二个class元素的title内容在Firefox中的修 

正。 

var rootNode=xmlDocument.documentElement: 

vat classNode=rootNode.childNodes[2];//class节点索引变 

成2 

var titleNode=classNode.childNodes[1];//title节点索引变 

成0 

var titleText=titleNode.nodeValue;//利用nodeValue属性 

得到title的文本内容 

alert(titleText);//输出JavaScript实例分析 

3.W3C的DOM对象 

W3C组织是对网络标准制定的一个非赢利组织,W3C 

定义了包括XML和DOM在内的许多互联网应用的协议规 

范。其中DOM(文档对象模型)为HTML、XML等数据载体 

和信息载体在内存中的处理提供了一种基本的对象模型。 

标准中提供连接到文件的结构、格式、事件等各方面的内 

容。由于不依赖于任何程序设计语言和网页描述语言,它为 

有效处理HTML和XML数据提供了一种标准的、独立的接 

口。 

不同的浏览器厂商在设计浏览器所支持的DOM时会 

做出一些修改。这样就导致了不同的浏览器之问对XML操 

作会存在不同的属性和方法。 

在W3C协议中,规范定义了XML DOM的一些操作内 

容。其中比较常用且大多数浏览器都支持的属性有:at. 

t utes——返回元素的属性集合;childNodes——返回元素 

的子节点的节点数组;firstChild——返回元素的首个子节 

点;nextSibling——返回元素之后紧跟的节点;parentN. 

ode——返回元素的父节点;previoussib1ing——返回元素之 

前紧随的节点;nodeValue——返回当前节点的内容值(非文 

本节点无效)。 

比较常用且大多数浏览器都支持的访问XML的方法 

有:getElementsByTagName()——找到具有指定标签名的子 

孙元素;getAttribute()——返回属性的值:getAttributeNodeO 

以Attirbute对象返回属性节点。 

4.重新定义方法封装W3C操作 

如果每一次读取XML的信息都要先判断浏览器的类 

型,然后再使用不同的方法得到相应的信息,对于程序员来 

说是一件痛苦的事情。若利用各个浏览器都支持的XML 

DOM属性和方法,将访问元素节点的方法重新封装,通过 

这种方法可以减轻程序员的负担。 

先判断当前的浏览器是IE内核还是Mozilla内核,并用 

个全局变量记录当前浏览器类型。关键代码如下所示: 

var type ”other”: 

if(typeof window.ActiveXObject『_’undefined'){ 

type=”ie”: 

} 

else if((typeof document.implementation!=’undefined')&& 

(typeof document.implementation.createDocument!='nude— 

ifned’)){ 

type=”mozilla”: 

} 

return type; 

定义一个函数getNodeValue(node,tagname),参数node 

是元素节点,tagname是标记的名称。该函数将根据不同的 

浏览器类型,在node的子节点中找出标记名称为tagname 

的元素节点的值,并将其返回。关键代码如下: 

var nodevalue=”: 

if(BrowserType()=”ie ,){ 

var nodes=node.childNodes; 

for(var i=0;i<nodes.1ength;i++){ 

if(nodes[i].nodeName==tagname){ 

nodevalue=nodes[i].text; 

break; 

} 

} 

} 

else{ 

var nodes=node.childNodes: 

for(var i:O;i<nodes.1ength;i++){ 

if(nodes[i].nodeName=- ̄agname){- 

nodevalue=nodes[i].firstChild.nodeValue; 

break: 

j 

} 

} 

return nodevalue; 

当我们需要访问第二个class节点的rilfe内容时,就可 

以简单用一个方法实现。 

classNodes=xmlDocument.getElementsByY ̄agNamef class’,); 

getNodeValue(classNodes[1】,’'tilte’,); 

以上代码均在IE7+和Fimfox3.5+测试通过。这样,客 

户端程序员就可以忽略浏览器的复杂性,专注于数据的显 

示和布局等其它方面的设计。 

5.总结 

在RIA应用越来越频繁的今天,客户端编程的作用越 

[4]左伟明.完全掌握xML——基础概念、核心技术与典型案例 

来越大,而Javascript作为客户端使用率最高的脚本也越来 

[M].北京:人民邮电出版社,2009. 

A Method of Reading XML for Different Browser 

Chen Chunyan 

(Guangzhou Municipal Vocational School,Guangzhou 510500,Guangdong) 

【Ab|岫Ict】XML(Extensible Markup Language1)is widely used in various applications for data storage and data exchange for it is 

light,structured,and cross-.platform supported.However,the translation ofXML documents between two browsers is not the same. 

This atricle introduces how the two major browsers-IE and Firefox to read XML ifle,and analyzes the differences between these two 

browsers.Then it proposes a general method which is constructed base on the W3C standard,in order to reduce the duplication of 

coding which causes by the browser differences. 

【 巧『'阳 l XML;browser;W3C:reading;DOM 

(上接第63页) 

Development of Human Resource Management System 

He Xingxing 

I ̄'Guangzhou Kangda Vocational Technical College,Guangzhou 5 1 1 363,Guangdong1 

【Ah血|cI】The project of Human Resource Management System is focusing on providing mid--sized and large corporate companies 

in China wiht comprehensive and practical human resource management software,including traditional human resources and financial 

management.The paper firstly makes a full demand analysis of the Human Resource Management and ensures various functional 

structures of the system.Secondly,the design of database and system security module is fully conducted and the system dynamic 

module is set up and finally the whole system is completed. 

【KI 】Human Resource Management;Object--Oriented;Uniifed Modeling Language 

73— 


本文标签: 浏览器 节点 内容 方法 元素