admin 管理员组

文章数量: 1087139


2024年4月19日发(作者:hive insert into语法)

维普资讯

・72・ (总698) 跨浏览器的XML接口的实现 2007盔 

跨浏览器的XML接口的实现 

广州大学 陈畅频 郭四稳 

XML是从SGML衍生出来的通用 技术。创建XML文档的标准方式由D0M 

return new ActiveXObject 

x()+ .XmlHttp );}} 

mplementation 

(getC0ntr0lPrefi

标记语言,是创建标记语言的元语言。 

级别2引入,它使用DOMI

eateDocument方法。 

XML结构化地表示信息,并支持网络跨 

接口的cr

catch(ex){) 

平台应用和数据交换。 

document.implementation.createDoc 

throw new Error(”您的浏览器不支 

fiedName, 

持XmlHttp对象 );); 

文档对象模型(Document Object 

ument(sNameSpaceUri,sQuali

 

Model,D0M)定义了访问和操作XML文 

oDoctype);

如果将来Mozilla本身提供了对 

档的标准方式,是操纵XML的最常用工 

这样就创建了一个XmlDocument对 

onreadystatechange事件的支持,则上述 

具之一。由DOM创建的节点树是XML 

文件内容的逻辑表示,它显示了文件提供 

的信息以及他们之间的关系。DOM现在 

不仅内置于Web浏览器,而且也成为许 

多基于XML的规范的一部分。 

XmlHttp提供客户端同http服务器 

通讯的协议。客户端可以通过XmlHttp对 

象向http服务器发送请求并使用DOM 

处理回应。现在的绝对多数浏览器都增加 

了对XmlHttp的支持,IE中使用 

ActiveXObject方式创建XmlHttp对象, 

其他浏览器:如Mozilla通过Firefox、 

Opera等通过window.XMLHttpRequest 

来创建XmlHttp对象。 

本文将详细讲述在IE和Mozilla中 

如何创建XmloDcument对象和XmlHttp 

对象来操纵XML并同HTTP服务器交 

互。 

l浏览器对XML的支持 

1.1 IE对XML的支持 

有两个被标记成脚本安全的ActiveX 

对象可以在IE中使用。这些对象使用 

MSXML解析器,创建方法如下: 

var xmlDocument — new 

ActiveXObject(“MsXml2.XmlDom”); 

var xmlHttp-二new ActiveXObject 

(“MsXml2.XmlHttp”); 

第一个对象代表XML文档,它允许 

你使用标准的DOM1核心方法向文档添 

加新的结点。该对象也提供了另外一些方 

法来支持从文件或字符串装入(获取) 

XML文档。 

第二个对象允许将XML文档发送到 

服务器,且来自服务器的回复也会发回到 

该XML HTTP请求对象。这使得不需要 

离开当前页面就可以发送XML数据到服 

务器。 

1.2 Mozilla对XML的支持 

Mozilla尽可能使用与W3C兼容的 

象并且可以用使用Mozilla支持的任何 的静态方法将只检查浏览器支持并使用 

D0M(级别1、2和3)方法。 

浏览器支持的机制来创建所需的对象实 

下面是一个最简单的例子 例。如果当前版本的Mozilla不支持 

document.implementation.createDo 

readyState属性,则也一定不支持 

cument(…,,… ,nul1); 

onreadystatechange事件,于是需要监听 

Mozilla支持XMLHttpRequest对 

onload事件并且在事件发生时调用用户 

象。下面的代码用于创建XML http请求 

提供的处理器(如果有的话)。 

对象。 

2.2 XmlDocument 

new XMLHttpRequest() 

function XmlDocument(){} 

2通用的XML接口 

XmlDocument.create—function() 

为了方便在不同的浏览器中使用 

{ 

XML,这里创建两个工厂类,分别叫做 

try{ 

XmlHttp和XmlDocument。这两个类都有 

if(document.implementation 

名为create的静态方法(类方法,共享方 

&& 

法),它创建正确类型的实例对象。 

document.implementation.createDocume 

var xmlDocument — 

nt) 

XmlDocument.create(); 

{ 

var xmlHttp=XmlHttp.create(); 

var doc 二- 

2.1 XmlHttp 

document.implementation.createDocume 

function XmlHttp(){} 

nt( , ,nul1); 

XmlHttp.create-二function(){ 

if(doc.readyState-二-二nul1) 

try{ 

{ 

if(window.XMLHttpRequest) 

doc.readyState-二1: 

{ 

doc.addEventListener( 

var req 二。 new 

load 。function(){ 

XMLHttpRequest(); 

doc.readyState一4; 

if(req.readyState-二-二nul1) 

if (typeof 

{ 

doc.onreadystatechange-二-二 function ) 

req.readyState一1: 

req.addEventListener‘( 

doc.onreadystatechange(); 

load ,function(){ 

),false);) 

req.readyState-二4: 

return doc;) 

if (typeof 

if(window.ActiveXObject) 

req.onreadystatechange一-二 function ) 

return new ActiveXObject 

(getContro1Prefix()+”.XmloDm );) 

req.onreadystatechange(); 

catch(ex){) 

),false);) 

throw new Error(”您的浏览器不支 

return req;} 

持XmlDocument对象”);); 

if(window.ActiveXObject){ 

为了支持onreadystatechange事件, 

维普资讯

第2O卷第9期 电脑开发与应用 

这里也做了一些额外的处理。但除此之 //将字符串解析成新的文档 

定采用异步还是同步方式。异步方式下客 

外,create方法的实现应当是很直观的。 

var doc2一(new DOMParser()) 

户端不需要等待服务器的响应,而是由浏 

2.3 getControlPrefix 

parseFromString(s,”text/xml”); 

览器在有响应时自动调用指定的回调函 

不同版本的IE和Windows安装了不 //删除所有原来的子元素 数(如这里的doSomething)。 

同版本的MSXML解析器,因此需要创建 

while(this.hasChildNodes()) 

②使用同步XmlHttp 

个帮助函数来检测对用户所用IE版本 

this.removeChild 

同步方式更容易使用,因为在服务器 

起作用的控件的前缀。这个函数试着一次 

(this.1astChild); 

做出响应之前对send的调用不会返回, 

性创建“XmlHttp”和“XmlDom”两个 

??插入并导人结 

而且浏览器在此期间也不会做其它事情。 

ActiveX对象,并且一发现起作用的前缀 

for (var i 一0; i < 

如果希望使用同步方式,则需要将open 

就记录下来,以避免重试。如果没有发现 

doc2.childNodes.1ength;i++){ 

的第3个参数设置成false。一旦send方 

有效的控件前缀则抛出异常。版本无关的 

this.appendChild 

法调用完毕,就可以访问responseXML 

控件前缀是“MSXML2”,这也是首先要测 

(this.importNode(doc2.childNodes[i], 

属性了。 

试的前缀。在它之后,其他一些前缀也被 

true));)); 

function loadSync(sUri)f 

测试。 Mozilla版本的XML文档缺少的 

var xmlHttp—XmlHttp-create 

function getContro1Prefix(){ 

个更重要的特性是将D0M树串行化 

(); 

if(getContro1Prefix.prefix) 

成XML字符串。幸运的是,可以使用名为 

xmlHttp.open(”GET”,sUri, 

return getContro1Prefix.prefix; 

XMLSerializer的类来做此事。在IE中, 

false); 

var prefixes—r”MSXML2”。” 

XML文档有一个名为xml的属性,它将 

xmlHttp.send(nul1); 

Microsoft”,”MSXML”,”MSXML3"]; 

DOM树串行化成XML字符串,于是在 

doS0mething 

var 0,02; 

Document.prototype上定义一个返回 

(xmlHttp.responseXML ); // 

for (var i 一0; i < 

XML字符串的获取器。 

responseXML:XmlDocument) 

prefixes.1ength;i++){ 

Document.prototype. 

3.2发送XML文档 

try{ 

defineGetter

(”xml”,function(){ 

这里依然使用XmlHttp对象发送 

//试着创建对象 

return(new XMLSerializer()) 

XML文档到服务器,只需要将 

0一new ActiveXObject 

seria1izeToString(this);)); 

XmlDocument作为参数传递给send方法 

(prefixes[i]+ .XmlHttp ; 

3使用XML接口 

即可。 

02一new ActiveXObject 

这里介绍使用在上面定义的XML 

function postAsync(sUri,xmlDoc){ 

(prefixes Eli+”.XmlDom ); 

接口的方法、 

var xmlHttp—XmlHttp.create 

return 

3.1请求XML文档 

(); 

getcontro1Prefix.prefix—prefixes E1]; 

使用异步XmlHttp 

xmlHttp.open(”GET”,sUri, 

) 

从服务器请求XML文档既可以使 

true); 

catch(ex){);) 

用XmlHttpt对象也可以使用 

xmlHttp.onreadystatechange = 

throw new Error(”找不到已安装的 

XmlDocument对象。一般使用第1个对 

function(){ 

XML解析器”);) 

象,因为它的功能更强大一些。 

if(xmlHttp.readyState=一4) 

2.4扩展Mozilla对XML的支持 

function loadAsync(sUri){ 

doSomething 

希望在对象XmlDocument上使用名 

var xmlHttp=XmlHttp.create 

(xmlHttp.responseXML ); // 

为loadXML的方法,该方法以一个字符 

(); 

responseXML:XmlDocument) 

串为参数并将它解析成XML。Mozilla版 

xmlHttp.open( GET ,sUri, 

xmlHttp.send(xmlDoc);) 

本的XmlDocument本身不支持这个方 

true); 

4结束语 

法,于是需要扩展Document的 

xmlHttp.onreadystatechange== 

在浏览器中操纵XML文档以及从 

prototype。在Mozilla中解析XML字符 

function()f 

(向)服务器读取(发送)XML文档是 

串可以使用内置在DOMParser对象中的 

if(xmlHttp.readyState一一4) 

AJAx技术的核心部分,但目前还未成为 

方法。 

doSomething 

W3C的标准。IE和Mozilla是目前用得最 

要从XML字符串装入文档,首先要 

(xmlHttp.responseXML ); // 

多的两种浏览器,前者通过ActiveX控件 

解析该字符串,然后删除原始树中的所有 

responseXML:XmlDocument 

支持XML且功能强大,后者对XML的 

结点并插入从已解析的字符串得到的文 

) 

支持是原生的但功能不够完善。为了方便 

档中的所有结点。 

xmlHttp.send(nul1);) 

开发web应用,本文对IE和Mozilla中 

Document.prototype.1oadXML — 

open方法带3个参数,第1个参数取 

的XML对象进行了封装,实现了一个跨 

function(s)( 

值为“GET”或“POST”。最后一个参数决 浏览器的XML接口。 


本文标签: 使用 创建 对象 文档 浏览器