js异步读取xml(支持ff和xpath)

摘要:
在各种论坛上用谷歌搜索了一整天之后,我们终于调试成功了。
在各大论坛间google了一整天,东拼西凑的终于调试成功了。

首先,定义一个全局变量用于识别当前浏览器是否IE
js异步读取xml(支持ff和xpath)第1张js异步读取xml(支持ff和xpath)第2张全局变量
js异步读取xml(支持ff和xpath)第3张var _isIe = navigator.appName == "Microsoft Internet Explorer" ? true : false;

针对xml对象在Firefox里的不同属性进行转换,统一接口
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张if (!_isIe)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    
var  ex;
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    XMLDocument.prototype.__proto__.__defineGetter__(
"xml" ,function ()js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张         
try js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张             
return  new XMLSerializer().serializeToString(this);
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        }
 catch (ex)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张             
var  d  =  document.createElement("div");
js异步读取xml(支持ff和xpath)第7张            d.appendChild(
this.cloneNode( true ));
js异步读取xml(支持ff和xpath)第7张             
return  d.innerHTML;
js异步读取xml(支持ff和xpath)第21张        }

js异步读取xml(支持ff和xpath)第21张    }
);
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    Element.prototype.__proto__.__defineGetter__(
"xml",  function ()js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张         
try js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张             
return   new  XMLSerializer().serializeToString(this);
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        }
 catch (ex)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张             
var  d  =  document.createElement("div");
js异步读取xml(支持ff和xpath)第7张            d.appendChild(
this.cloneNode(true));
js异步读取xml(支持ff和xpath)第7张             
return  d.innerHTML;
js异步读取xml(支持ff和xpath)第21张        }

js异步读取xml(支持ff和xpath)第21张    }
);
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    XMLDocument.prototype.__proto__.__defineGetter__(
"text",  function ()js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张         
return   this.firstChild.textContent;
js异步读取xml(支持ff和xpath)第21张    }
);
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    Element.prototype.__proto__.__defineGetter__(
"text",  function ()js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张         
return   this.textContent;
js异步读取xml(支持ff和xpath)第21张    }
);
js异步读取xml(支持ff和xpath)第7张
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    XMLDocument.prototype.selectSingleNode 
= Element.prototype.selectSingleNode = function (XPath)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        alert(
"selectSingleNode");
js异步读取xml(支持ff和xpath)第7张         
var  x = this.selectNodes(xpath);
js异步读取xml(支持ff和xpath)第7张         alert(x);
js异步读取xml(支持ff和xpath)第7张         alert(x.length);
js异步读取xml(支持ff和xpath)第7张         
if ( !|| x.length < 1 ) return  null;
js异步读取xml(支持ff和xpath)第7张         
return  x[0];
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    XMLDocument.prototype.selectNodes 
= Element.prototype.selectNodes = function (xpath)js异步读取xml(支持ff和xpath)第6张{       
js异步读取xml(支持ff和xpath)第7张     alert(
"selectNodes");
js异步读取xml(支持ff和xpath)第7张        
var xpe = new XPathEvaluator();
js异步读取xml(支持ff和xpath)第7张     alert(
"1");         
js异步读取xml(支持ff和xpath)第7张      
var nsResolver = xpe.createNSResolver(this.ownerDocument == null ? this.documentElement : this.ownerDocument.documentElement);       
js异步读取xml(支持ff和xpath)第7张         alert(
"2");    
js异步读取xml(支持ff和xpath)第7张           
var result = xpe.evaluate(xpath, this, nsResolver, 0null);
js异步读取xml(支持ff和xpath)第7张         alert(
"3");    
js异步读取xml(支持ff和xpath)第7张         
var  found =  [];
js异步读取xml(支持ff和xpath)第7张         
var  res;         
js异步读取xml(支持ff和xpath)第7张         
while (res = result.iterateNext())
js异步读取xml(支持ff和xpath)第7张        found.push(res);
js异步读取xml(支持ff和xpath)第7张        
return found;
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第7张    
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    Node.prototype.transformNode 
= function (oXslDom) js异步读取xml(支持ff和xpath)第6张
js异步读取xml(支持ff和xpath)第7张                 
js异步读取xml(支持ff和xpath)第7张        
var oProcessor = new XSLTProcessor(); 
js异步读取xml(支持ff和xpath)第7张        oProcessor.importStylesheet(oXslDom); 
js异步读取xml(支持ff和xpath)第7张     
js异步读取xml(支持ff和xpath)第7张        
var oResultDom = oProcessor.transformToDocument(this); 
js异步读取xml(支持ff和xpath)第7张        
var sResult = oResultDom.xml; 
js异步读取xml(支持ff和xpath)第7张     
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        
if (sResult.indexOf(" <transformiix:result">  -1js异步读取xml(支持ff和xpath)第6张
js异步读取xml(支持ff和xpath)第7张            sResult 
= sResult.substring(sResult.indexOf(""+ 1, sResult.lastIndexOf(" <")); 
js异步读取xml(支持ff和xpath)第21张        }
 
js异步读取xml(支持ff和xpath)第7张     
js异步读取xml(支持ff和xpath)第7张        
return sResult;                 
js异步读取xml(支持ff和xpath)第21张    }
;
js异步读取xml(支持ff和xpath)第94张}

相关函数如下:
js异步读取xml(支持ff和xpath)第95张js异步读取xml(支持ff和xpath)第96张相关函数
js异步读取xml(支持ff和xpath)第3张/// <summary>创建xml对象</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>返回创建成功的xml对象</returns>
js异步读取xml(支持ff和xpath)第3张
function createDomDoc()
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{        
js异步读取xml(支持ff和xpath)第7张    
if(_isIe)
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        
var signatures=["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","Msxml2.DOMDocument","Microsoft.XmlDom"];
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        
for(var i=0;i<signatures.length;i++)js异步读取xml(支持ff和xpath)第6张{tryjs异步读取xml(支持ff和xpath)第6张this.domDoc=new ActiveXObject(signatures[i]);return this.domDoc;}catch(e)js异步读取xml(支持ff和xpath)第6张{}}
js异步读取xml(支持ff和xpath)第7张        
return null;
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第7张    
else
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        
return document.implementation.createDocument("","",null);
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>根据xpath取符合条件的节点集合</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="domDoc">xml对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="xpath">xpath语句</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>返回符合条件的节点集合</returns>
js异步读取xml(支持ff和xpath)第3张
function selectNodes(domDoc, xpath)
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    
if (_isIe)
js异步读取xml(支持ff和xpath)第7张        
return domDoc.selectNodes(xpath) ;
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
elsejs异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        
var aNodeArray = new Array();
js异步读取xml(支持ff和xpath)第7张        
var xPathResult = domDoc.evaluate(xpath, domDoc, domDoc.createNSResolver(domDoc.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        
if (xPathResult)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张            
var oNode = xPathResult.iterateNext() ;
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张            
while(oNode)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张                aNodeArray[aNodeArray.length] 
= oNode ;
js异步读取xml(支持ff和xpath)第7张                oNode 
= xPathResult.iterateNext();
js异步读取xml(支持ff和xpath)第21张            }

js异步读取xml(支持ff和xpath)第21张        }

js异步读取xml(支持ff和xpath)第7张        
return aNodeArray ;
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>返回xml对象的内容字符串</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="domDoc">xml对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>返回xml对象的内容字符串</returns>
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
function lookXml(domDoc)js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
if(_isIe)js异步读取xml(支持ff和xpath)第6张{return domDoc.xml;}
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
elsejs异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        
var serializer=new XMLSerializer();
js异步读取xml(支持ff和xpath)第7张        
var xml=serializer.serializeToString(domDoc);
js异步读取xml(支持ff和xpath)第7张        
return xml;
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>根据url异步加载xml对象</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="domDoc">传入创建好的xml对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="url">xml文件存在的地址(有人说此方法只能访问本服务器上的文件,尚未验证)</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="fun">加载成功后执行的函数名(带一个xml对象参数)</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>无</returns>
js异步读取xml(支持ff和xpath)第3张
function loadByUrl(domDoc, url, fun)
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    domDoc.async 
= true;
js异步读取xml(支持ff和xpath)第7张    
if(_isIe)
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        domDoc.onreadystatechange 
= function() 
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        
js异步读取xml(支持ff和xpath)第6张
js异步读取xml(支持ff和xpath)第7张            
//alert(domDoc.readyState);
js异步读取xml(支持ff和xpath)第7张
            if (domDoc.readyState == 4
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张            
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张                   
//alert("readyState载入完毕!");
js异步读取xml(支持ff和xpath)第7张
                   fun(domDoc);
js异步读取xml(支持ff和xpath)第21张            }
 
js异步读取xml(支持ff和xpath)第21张        }
 
js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第7张    
else
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张    
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张        domDoc.onload 
= function(success)
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张        
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张            
if(success)
js异步读取xml(支持ff和xpath)第8张js异步读取xml(支持ff和xpath)第9张            
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张                
//alert("onload加载完成。");
js异步读取xml(支持ff和xpath)第7张
                fun(domDoc);
js异步读取xml(支持ff和xpath)第21张            }

js异步读取xml(支持ff和xpath)第21张        }

js异步读取xml(支持ff和xpath)第21张    }

js异步读取xml(支持ff和xpath)第7张    domDoc.load(url);
js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>获取节点的内容</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="obj">xml节点对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>返回节点内的值</returns>
js异步读取xml(支持ff和xpath)第3张
function getText(obj)
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    
return obj.firstChild.nodeValue;
js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>获取节点属性</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="obj">xml节点对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="key">属性名</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>返回节点指定属性的值</returns>
js异步读取xml(支持ff和xpath)第3张
function getKey(obj, key)
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    
var o=obj.getAttribute(key);
js异步读取xml(支持ff和xpath)第7张    
return o==null?"":o;
js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>设置节点的内容</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="obj">xml节点对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="text">要写入节点的内容</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>无</returns>
js异步读取xml(支持ff和xpath)第3张
function setText(obj, text)
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    obj.firstChild.nodeValue
=text;
js异步读取xml(支持ff和xpath)第94张}

js异步读取xml(支持ff和xpath)第3张
js异步读取xml(支持ff和xpath)第3张
/// <summary>设置节点的属性</summary>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="obj">xml节点对象</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="key">属性名</param>
js异步读取xml(支持ff和xpath)第3张//
/ <param name="text">要写入节点属性的内容</param>
js异步读取xml(支持ff和xpath)第3张//
/ <returns>无</returns>
js异步读取xml(支持ff和xpath)第3张
function setKey(obj, key, text)
js异步读取xml(支持ff和xpath)第4张js异步读取xml(支持ff和xpath)第5张
js异步读取xml(支持ff和xpath)第6张{
js异步读取xml(支持ff和xpath)第7张    obj.setAttribute(key,text);
js异步读取xml(支持ff和xpath)第94张}

免责声明:文章转载自《js异步读取xml(支持ff和xpath)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转帖]javascript版 UrlEncode和UrlDecode函数BCB6 E2494 Unrecognized __declspec modifier下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ContextLoaderListener初始化的前后文和DispatcherServlet初始化的上下文关系

从图中可以看出:ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean;DispatcherServlet初始化的上下文加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、Handl...

如何写出优雅的 JS 代码,变量和函数的正确写法

在开发中,变量名,函数名一般要做到清晰明了,尽量做到看名字就能让人知道你的意图,所以变量和函数命名是挺重要,今天来看看如果较优雅的方式给变量和函数命名。 变量 使用有意义和可发音的变量名 // 不好的写法 const yyyymmdstr = moment().format("YYYY/MM/DD"); // 好的写法 const currentDate...

JSP不支持EL表达式的解决方案

EL的全称是Expression Language。 1.在默认情况下,Servlet 2.3 / JSP 1.2是不支持EL表达式的,而Servlet 2.4 / JSP 2.0支持。 servlets 2.4这个版本的isELIgnored默认设置为false。所以使用web.xml里用web-app_2_4.xsd声明的时候在JSP页面不用特意声明。...

xml模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。 xml的格式如下,就是通过<>节点来区别数据结构的: <?xml version="1.0"?> <...

从程序员的角度分析微信小程序(编程语言:用到什么学什么)

从程序员的角度分析微信小程序(编程语言:用到什么学什么) 一、总结 一句话总结:微信小程序原理就是用JS调用底层native组件,和React Native非常类似。(需要时,用到时再学) 1、选择语言的时候,其实就是在做选择题。是选择便利还是选择性能? 对 2、凡是能用JS开发的最终都会用JS开发,因为便利? 对 二、从程序员的角度分析微信...

利用js获取图片尺寸与图片大小(高度与宽度)

利用获取图片尺寸与图片大小(高度与宽度)要注意一点的是要等 图片加载完成后才能js 获取图片宽度与高度的,所以要判断在readystate=="complete"的状态下获取大小,如果是利用file上传的话,每次都要点击清除 image=new image(); imgage.width与高度哦。<!doctype html public "-//w3...