`
LeeYee
  • 浏览: 72295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript xml 文档处理

阅读更多

前几天了解了下javascript对于xml解析的一些知识,在这里稍作记录下。这里主要对针对IE、Mozilla进行相关代码编写及测试,不涉及chrome浏览器,因此可能在chrome浏览器相关代码无法正常工作。期间参考了《JavaScript高级程序设计》第15章中的相关知识。

PS:chrome浏览器 写道
针对chrome浏览器的读取xml文档,需通过XMLHttpRequest对象进行设置,因为在chrome浏览器通过document.implementation.createDocument方法创建的Document对象中并未定义load方法,因此必须通过下述方式获取。
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", file, false);
xmlhttp.send(null);
xmlDoc = xmlhttp.responseXML.documentElement;

 
IE通过ActiveXObject实现针对xml文档的操作,而Mozilla则通过 document.implementation.createDocument对象实现对xml文档的操作。同时IE提供了load及loadXML两个方法访问xml,而Mozilla只提供了load方法进行。我们可以通过改造Mozilla的相关对象实现与IE相同的loadXML方法。

这里要说明的是在创建好xml文档操作的对象后,默认读取xml的模式为异步即async = true;

当async = true即异步模式时,javascript代码不会等待xml文档完全载入后才继续执行代码,那么就可能会出现在使用xml文档对象时,文档还尚未被完全载入的情况。同时IE与Mozilla处理异步模式的方式也不同:
1、针对IE,异步载入文件时,会使用readyState属性和触发onreadystatechange事件处理函数;readyState属性的说明如下:
    0——DOM尚未初始化任何信息;
    1——DOM正在载入数据;
    2——DOM完成了数据载入;
    3——DOM已经可用,不过某些部分可能还不能用;
    4——DOM已经完全被加载,可以使用;
2、针对Mozilla,异步载入时,同样会使用readyState属性,但触发的是onload事件处理函数;但readyState属性的定义不同
    ‘loading’——DOM尚在载入数据;
    ‘complete’——DOM完成加载,可以使用;
那么当使用异步模式时,针对xml文档的处理就应该放在相应的事件处理函数中及readyState标识为完成加载时,而不应该紧接着load方法之后。
当async = false即异步模式时,可以不用考虑上述问题,因为这时候只有文档已经被完全载入后,javascript才会继续执行后面的代码;

针对以上两个问题,显而易见,为了使用javascript对xml文档的操作是要考虑浏览器的。为此可以创建以下代码:

  1. function  XmlDom() {  
  2.     if  (window.ActiveXObject) {  
  3.         try  {  
  4.             var  oXmlDom =  new  ActiveXObject( "Microsoft.XMLDOM" );  
  5.             oXmlDom.async = false ;  
  6.             return  oXmlDom;  
  7.         } catch  (oError) {  
  8.             oError.reason;  
  9.         }  
  10.         throw   new  Error( "MSXML is not installed on you system." );  
  11.     } else   if  (document.implementation  
  12.             && document.implementation.createDocument) {  
  13.         var  oXmlDom = document.implementation.createDocument( "" "" null );  
  14.         oXmlDom.addEventListener("load" function () {  
  15.             this .__changeReadyState__();  
  16.         }, false );  
  17.         /*  
  18.          * 设置为同步模式,使其在调用 load 方法完成对xml文档的读入后在继续进行其他操作<br/>  
  19.          * 如果设置为异步模式,则在使用 oXmlDom 对象前首先判断xml文档是否已经加载完成。<br/>  
  20.          * xml文档加载完成的标志是:<br/>   
  21.          * 1、在 IE 中 oXmlDom 对象的 readyState 属性等于4时;  
  22.          * 2、在 Mozilla 中 oXmlDom 对象的 readyState 属性等于  'complete' 时;  
  23.          */   
  24.         oXmlDom.async = true ;  
  25.         return  oXmlDom;  
  26.     } else  {  
  27.         throw   new  Error( "Your browser doesn't support an XML DOM object." );  
  28.     }  
  29. }  
  30. if  (Document) { //这里偷懒了,需要判断是否是Mozilla   
  31.     Document.prototype.onreadystatechange = null ;  
  32.     Document.prototype.__changeReadyState__ = function () {  
  33.         if  ( typeof   this .onreadystatechange ==  'function' ) {  
  34.             this .onreadystatechange();  
  35.         }  
  36.     };  
  37.     Document.prototype.loadXML = function (sXml) {  
  38.         var  oParser =  new  DOMParser();  
  39.         var  oXmlDom = oParser.parseFromString(sXml,  "text/xml" );  
  40.         while  ( this .firstChild) {  
  41.             this .removeChild( this .firstChild);  
  42.         }  
  43.         for  (  var  i = 0; i < oXmlDom.childNodes.length; i++) {  
  44.             var  oNewNode =  this .importNode(oXmlDom.childNodes[i],  true );  
  45.             this .appendChild(oNewNode);  
  46.         }  
  47.     };  
  48.     Document.prototype.__load__ = Document.prototype.load;  
  49.     Document.prototype.load = function (sURL) {  
  50.         this .__load__(sURL);  
  51.     };  
  52.     // 为节点定义xml获取函数,使其节点可以直接使用方法.xml   
  53.     // __defineGetter__方法只在 Mozilla中定义   
  54.     Node.prototype.__defineGetter__("xml" function () {  
  55.         var  oSerializer =  new  XMLSerializer();  
  56.         return  oSerializer.serializeToString( this "text/xml" );  
  57.     });  
  58. }  


测试代码如下:

测试1、当使用同步模式时

  1. function  test() {  
  2.     var  oXmlDom = XmlDom();  
  3.     oXmlDom.async = false ;  
  4.     oXmlDom.load("exam1.xml" );  
  5.     alert(oXmlDom.xml);  
  6. }  

测试2、当使用异步模式时

  1. function  test() {  
  2.     var  oXmlDom = XmlDom();  
  3.     oXmlDom.async = true ;  
  4.     oXmlDom.onreadystatechange = function () {  
  5.         //IE|FF   
  6.         if  (oXmlDom.readyState == 4 || oXmlDom.readyState ==  "complete" ) {  
  7.             alert(oXmlDom.xml);  
  8.         }  
  9.     }  
  10.     oXmlDom.load("exam1.xml" );  
  11. }  

如果异步模式时仍使用测试1的代码,将不会得不到任何返回值;

csdn地址:http://blog.csdn.net/oxcow/archive/2010/06/06/5650937.aspx

分享到:
评论

相关推荐

    JavaScript处理XML文档

    ### JavaScript处理XML文档 #### DOM文档对象模型概述 文档对象模型(Document Object Model,简称DOM)是一种用于HTML和XML文档的标准编程接口。DOM定义了一种逻辑结构,以及一系列用于访问和操纵文档的方法。...

    javascript读写XML文件

    虽然在客户端使用JavaScript直接保存XML文件存在限制(通常需要在服务器端处理),但在某些情况下,可以使用`save`方法(仅限于IE)或通过`toString`方法获取XML文档的字符串表示,然后通过AJAX请求或其他方式将其...

    xml文件处理程序

    总结,XML文件处理是软件开发中的基础技能,涉及文件读写、DOM操作、XPath查询等多个方面。掌握这些知识能帮助我们有效地管理和操作结构化数据。在实际项目中,理解并运用这些概念可以提高数据处理的效率和准确性。

    xml.rar_javascript_javascript xml_xml javascript_xml文件

    JavaScript,作为Web开发中的主要脚本语言,常常被用来解析和操作XML文档,以实现动态内容的生成和数据处理。 在JavaScript中处理XML,主要有两种方法:DOM(Document Object Model)和SAX(Simple API for XML)。...

    Javascript读取xml文件

    - **节点类型**:理解XML文档中的不同节点类型(如元素节点、文本节点、属性节点等)对于有效处理XML至关重要。 - **获取节点**: - **`getElementsByTagName`**:根据标签名获取一组节点。 - **`...

    javascript读取XML文件方法

    最后,我们可以将处理后的XML文档保存到文件或直接获取其字符串表示: - **保存到文件**: ```javascript xmlDoc.save("output.xml"); ``` - **获取XML字符串**: ```javascript alert(xmlDoc.xml); ``` #### 三...

    javascript 对xml文件解析

    因此,JavaScript 对 XML 文件的解析能力对于处理动态数据非常关键。 #### 二、JavaScript 解析 XML 的方法 ##### 1. **使用 ActiveXObject (IE 浏览器)** - **代码示例**: ```javascript function ...

    javascript操作xml文件示例

    DOM是一种标准,允许程序和脚本动态更新、添加、删除和改变元素和属性,使得XML文档可以被解析和处理。下面将详细介绍如何使用JavaScript进行XML文件的操作,主要包括增加、删除、修改和查询。 1. **加载XML文件** ...

    javascript对xml的处理

    在JavaScript中,XML DOM(Document Object Model)提供了一组接口,用于创建、修改和遍历XML文档。例如,你可以使用`DOMParser`对象将XML字符串解析为DOM树: ```javascript let xmlString = '&lt;root&gt;&lt;item id="1"&gt;...

    使用javascript遍历XML文件并显示

    总之,这篇博客详细介绍了如何使用JavaScript与XML文件交互,这对于任何需要在客户端处理结构化数据的Web开发者来说都是非常有价值的知识。通过掌握这些技术,开发者可以构建更强大、更灵活的Web应用程序,动态地...

    读写XML文件实例 Javascript

    总结来说,Node.js结合`xml2js`库提供了强大且灵活的XML处理能力,使JavaScript开发者能够轻松地在服务器端进行XML文件的读写操作。通过理解这一实例,你可以更好地掌握在Node.js环境中使用JavaScript处理XML的技巧...

    JavaScript获取XML文件的数据

    - **XMLSerializer**:如果需要将修改后的XML文档保存为文件,可以使用XMLSerializer将DOM对象序列化为字符串。 ```javascript var serializer = new XMLSerializer(); var xmlString = serializer....

    JavaScript读取xml文件内容.zip

    // 在此处处理解析后的XML文档 } }; xhr.send(); ``` 这段代码创建了一个新的XMLHttpRequest实例,打开到'm.xml'的连接,然后发送请求。当请求完成且状态为200(表示成功)时,`onreadystatechange`函数会被调用,...

    javascript xml xsl xslt

    XML文档结构清晰,易于机器解析和生成,常用于数据交换、配置文件和API接口的数据格式。 XSL(eXtensible Stylesheet Language)是一种样式表语言,用于转换XML文档的格式。XSL分为两个主要部分:XSLT(XSL ...

    使用javascript解析xml文件或xml格式字符串中文WORD版

    资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版   内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...

    javascript xml操作函数

    本文档将详细介绍一个自定义的JavaScript库,该库提供了一系列用于操作XML数据的方法,包括加载XML文件(同步和异步)、将字符串转换为XML文档等功能。 #### 二、XML操作函数库概览 该库包含三个主要方法:`XML....

    js-xml.rar_javascript_javascript xml_js xml_js解析xml_xml js

    在JavaScript中,XML文档可以通过DOM(Document Object Model)接口来解析。DOM是一种标准,允许程序和脚本动态更新、添加和删除HTML或XML文档的内容和结构。XML文档被解析成一个DOM树,每个节点代表XML文档的一个...

    Javascript解析服务器端XML文件

    在浏览器环境下,我们通常用`XMLHttpRequest`对象来获取服务器上的XML文件,然后使用`responseXML`属性来获取XML文档对象。 以下是一个基本的示例,展示了如何使用JavaScript加载XML文件并进行解析: ```...

    javascript解析xml文件

    一旦有了XML文档对象,我们可以将其内容转换为HTML。这通常涉及到遍历XML节点并创建对应的HTML元素。例如,如果XML是简单的列表,我们可以创建一个`&lt;ul&gt;`元素,并为每个`&lt;item&gt;`元素创建一个`&lt;li&gt;`: ```javascript...

    XML链接和文档处理代码

    XML文档通常包含结构化信息,而处理这些文档时,我们经常需要链接不同的XML文件或者对XML文档进行操作。在这个主题中,我们将深入探讨XML链接、文档处理以及XPath在其中的作用。 XML链接主要涉及到两个概念:XLink...

Global site tag (gtag.js) - Google Analytics