为FireFox的XMLDocument 增加 LoadXML,SelectNodes,SelectSingleNode方法

本文介绍了一种在 Firefox 中使用 XML DOM 的方法,通过自定义 loadXML 方法和 XPath 查询功能,使得开发者能够在 Firefox 浏览器中实现类似 IE 的 XML 处理功能。

用惯了IE 的Dom,再来用 FireFox的Dom,感觉真的非常不习惯。连最起码的LoadXML方法都没有。
加入下面的代码,你就可以像在IE下一样使用XmlDom啦!

 

var infoNodes;
if(document.all)
    infoNodes 
= document.getElementById("xmlInfo").XMLDocument.documentElement.selectNodes("Product");
else{
    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 = [];
          
forvar 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";}
       }

    }


  
// 创建 XML 文档对象
  var xmlRef = document.implementation.createDocument("text/xml"""null);
  
// 使用 importNode 将HTML DOM 的一部分转换为XML 文档。 

  
// 参数 true 表示克隆全部子元素。
  var myNode = document.getElementById("xmlInfo");
  xmlRef.loadXML(myNode.innerHTML);
  infoNodes 
= xmlRef.documentElement.childNodes;
}


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值