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

用惯了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;
}

你可能感兴趣的:(为FireFox的XMLDocument 增加 LoadXML,SelectNodes,SelectSingleNode方法。)