Javascript支持在Firefox下读取XML节点的方法

出处:http://blog.csdn.net/gaoyunpeng/article/details/2063351

最近在修改项目的用到Ajax功能的页面,发现很多写法在Firefox下都存在问题,主要是因为当时开发时只在IE下测试通过就提交了,而Firefox的写法与IE有很大的区别,主大的问题是当在读取XML节点或子节点的内容时,IE下一般使用selectNodes selectSingleNode 这 些方法,而Firefox并没有这些方法,所以不能使用,前几天找了好久终于,一直没有找到一个很好的解决方法,很多网站提供的要不就是根本不支持,要不 就是使用方法,不方便不实用,今天我终于找到一个很好的解决方法了,我把它弄成一个JS文件,只要引用它就可以像IE一样使用了。

代码如下:
 

  
  
  
  
  1. var GetNodeValue = function(obj)  
  2. {  
  3.     var str = "";  
  4.     if(window.ActiveXObject)    //IE  
  5.     {  
  6.         str = obj.text;  
  7.     }  
  8.     else //Mozilla  
  9.     {  
  10.         try 
  11.         {  
  12.             str = obj.childNodes[0].nodeValue;  
  13.         }  
  14.         catch(ex)  
  15.         {  
  16.             str = "";  
  17.         }  
  18.     }  
  19.     return str;  
  20. }  
  21.  
  22. if(document.implementation && document.implementation.createDocument)  
  23. {  
  24.     XMLDocument.prototype.loadXML = function(xmlString)  
  25.     {  
  26.         var childNodes = this.childNodes;  
  27.         for (var i = childNodes.length - 1; i >= 0; i--)  
  28.             this.removeChild(childNodes[i]);  
  29.  
  30.         var dp = new DOMParser();  
  31.         var newDOM = dp.parseFromString(xmlString, "text/xml");  
  32.         var newElt = this.importNode(newDOM.documentElement, true);  
  33.         this.appendChild(newElt);  
  34.     };  
  35.  
  36.     // check for XPath implementation  
  37.     if( document.implementation.hasFeature("XPath""3.0") )  
  38.     {  
  39.        // prototying the XMLDocument  
  40.        XMLDocument.prototype.selectNodes = function(cXPathString, xNode)  
  41.        {  
  42.           if( !xNode ) { xNode = this; }   
  43.           var oNSResolver = this.createNSResolver(this.documentElement)  
  44.           var aItems = this.evaluate(cXPathString, xNode, oNSResolver,   
  45.                        XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)  
  46.           var aResult = [];  
  47.           forvar i = 0; i < aItems.snapshotLength; i++)  
  48.           {  
  49.              aResult[i] =  aItems.snapshotItem(i);  
  50.           }  
  51.           return aResult;  
  52.        }  
  53.  
  54.        // prototying the Element  
  55.        Element.prototype.selectNodes = function(cXPathString)  
  56.        {  
  57.           if(this.ownerDocument.selectNodes)  
  58.           {  
  59.              return this.ownerDocument.selectNodes(cXPathString, this);  
  60.           }  
  61.           else{throw "For XML Elements Only";}  
  62.        }  
  63.     }  
  64.  
  65.     // check for XPath implementation  
  66.     if( document.implementation.hasFeature("XPath""3.0") )  
  67.     {  
  68.        // prototying the XMLDocument  
  69.        XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)  
  70.        {  
  71.           if( !xNode ) { xNode = this; }   
  72.           var xItems = this.selectNodes(cXPathString, xNode);  
  73.           if( xItems.length > 0 )  
  74.           {  
  75.              return xItems[0];  
  76.           }  
  77.           else 
  78.           {  
  79.              return null;  
  80.           }  
  81.        }  
  82.          
  83.        // prototying the Element  
  84.        Element.prototype.selectSingleNode = function(cXPathString)  
  85.        {      
  86.           if(this.ownerDocument.selectSingleNode)  
  87.           {  
  88.              return this.ownerDocument.selectSingleNode(cXPathString, this);  
  89.           }  
  90.           else{throw "For XML Elements Only";}  
  91.        }  
  92.     }  
  93. }  
  94.  

只要把以上代码存成一个JS文件,在页面上引用它,当XML节点的读取操作就可以像IE一样使用了,已经通过测试。
 

你可能感兴趣的:(JavaScript,休闲,读取XML的方法)