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

原帖地址:
http://www.cnblogs.com/huacn/archive/2007/07/23/javascript_firefox_xml_document_selectNodes.html

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

代码如下:
var  GetNodeValue  =   function (obj)
{
    
var  str  =   "" ;
    
if (window.ActiveXObject)     // IE
    {
        str 
=  obj.text;
    }
    
else   // Mozilla
    {
        
try
        {
            str 
=  obj.childNodes[ 0 ].nodeValue;
        }
        
catch (ex)
        {
            str 
=   "" ;
        }
    }
    
return  str;
}

if (document.implementation  &&  document.implementation.createDocument)
{
    XMLDocument.prototype.loadXML 
=   function (xmlString)
    {
        
var  childNodes  =   this .childNodes;
        
for  ( var  i  =  childNodes.length  -   1 ; i  >=   0 ; i -- )
            
this .removeChild(childNodes[i]);

        
var  dp  =   new  DOMParser();
        
var  newDOM  =  dp.parseFromString(xmlString,  " text/xml " );
        
var  newElt  =   this .importNode(newDOM.documentElement,  true );
        
this .appendChild(newElt);
    };

    
//  check for XPath implementation
     if ( document.implementation.hasFeature( " XPath " " 3.0 " ) )
    {
       
//  prototying the XMLDocument
       XMLDocument.prototype.selectNodes  =   function (cXPathString, xNode)
       {
          
if ! xNode ) { xNode  =   this ; } 
          
var  oNSResolver  =   this .createNSResolver( this .documentElement)
          
var  aItems  =   this .evaluate(cXPathString, xNode, oNSResolver, 
                       XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
null )
          
var  aResult  =  [];
          
for var  i  =   0 ; i  <  aItems.snapshotLength; i ++ )
          {
             aResult[i] 
=   aItems.snapshotItem(i);
          }
          
return  aResult;
       }

       
//  prototying the Element
       Element.prototype.selectNodes  =   function (cXPathString)
       {
          
if ( this .ownerDocument.selectNodes)
          {
             
return   this .ownerDocument.selectNodes(cXPathString,  this );
          }
          
else { throw   " For XML Elements Only " ;}
       }
    }

    
//  check for XPath implementation
     if ( document.implementation.hasFeature( " XPath " " 3.0 " ) )
    {
       
//  prototying the XMLDocument
       XMLDocument.prototype.selectSingleNode  =   function (cXPathString, xNode)
       {
          
if ! xNode ) { xNode  =   this ; } 
          
var  xItems  =   this .selectNodes(cXPathString, xNode);
          
if ( xItems.length  >   0  )
          {
             
return  xItems[ 0 ];
          }
          
else
          {
             
return   null ;
          }
       }
       
       
//  prototying the Element
       Element.prototype.selectSingleNode  =   function (cXPathString)
       {    
          
if ( this .ownerDocument.selectSingleNode)
          {
             
return   this .ownerDocument.selectSingleNode(cXPathString,  this );
          }
          
else { throw   " For XML Elements Only " ;}
       }
    }
}

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

Firefox XML读取类下载地址: http://www.cnblogs.com/Files/huacn/jquery.xml.js
Firefox 读XML演示地址: http://www.wathon.com/opensource/js/xmlrssreader/xmlrssreader.html
Firefox 读XML例子源代码打包下载: http://www.wathon.com/opensource/js/xmlrssreader/xmlrssreader.zip
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值