XPath is a lightweight XML analytical way, and now most of the browser does not fully support the W3C's DOM Level 3 XPath features. However, if the only occasion in the general use, XPath is a fast, efficient means to resolve XML.



The following code in IE6, 7, FF2, 3, Chrome, Safari test:



function XMLUtil(xmldoc){ //XMLUtil 对象
	this.xmlDom = null;
	this.isIE = false; 
	 
	this.setXmlDom = function(/*xmlString*/xmldoc){ 
		this._setXmlDom(xmldoc);
	}
        
        /*get an xml node*/
	this.getXmlItem = function(/*xml query path*/path,NSResolver){
       //return string

	 if(!NSResolver){ //支持nameSpace
	 	NSResolver = null;
	 }
		if (this.isIE) {
		 
			return this.xmlDom.selectSingleNode(path).text; 
		}else{
			var xmlEvaluator = new XPathEvaluator();
			var results = xmlEvaluator.evaluate(path,this.xmlDom.documentElement,NSResolver,XPathResult.STRING_TYPE,null);
			return results.stringValue;
		} 
	};
       
        /*get xml nodes*/

	this.getXmlItems = function(/*xml query path*/path,NSResolver){
	
       //return string Array
	 var xmlArray = [];
	 if(!NSResolver){
	 	NSResolver = null;
	 }
		if (this.isIE) {
			 
			var xmlItems = this.xmlDom.selectNodes(path);
			for (var i=0;i<xmlItems.length;i++){
				 
				xmlArray[i] = xmlItems.item(i).text;
			}
		}else{
			var xmlEvaluator = new XPathEvaluator();
			var results = xmlEvaluator.evaluate(path,this.xmlDom.documentElement,NSResolver,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null);
			var xmlItem = results.iterateNext();
			var i = 0;
			while(xmlItem){
				xmlArray[i] = xmlItem.textContent; 
				xmlItem = results.iterateNext();
				i++;
			}
		} 
		return xmlArray; 
	};
	/*
         * set the xml doc
        */
	this._setXmlDom = function(xmldoc){ 
		if (window.ActiveXObject)  {
			 
			 this.isIE = true;
		      try{ 
				var XmlDom = new ActiveXObject("Microsoft.XMLDOM");
				 
				XmlDom.loadXML(xmldoc);
				 }
			  catch (error){console.debug('xml parser error');}  
			  }
		else    {
			 this.isIE=false;  
			  var oParser = new DOMParser();
			  try{
			  	
			  var XmlDom = oParser.parseFromString(xmldoc,"text/xml"); 
			  
			  }catch (error){console.debug('xml parse error'+error.toString);}
			   }
			      
			   this.xmlDom = XmlDom;
};
}

Call Code:



var parser = new XMLUtil();
 
 parser.setXmlDom(/*String*/xml);
var cred = parser.getXmlItem("//root/branch/cred");

If you need support nameSpace, you need to define a namespace since the analytic function:



 var parser = new XMLUtil();
        parser.xmlDom = data;
        var ns = function NSResolver(prefix){
			if (prefix == 'serv') {
				return 'http://www.g.com/schemas/service';
			}else if (prefix == 'com') {
				return 'http://www.g.com/schemas/common';
			}else if(prefix =='meet') {
				return 'http://www.g.com/schemas/service/meeting';
            }else if(prefix == 'ep'){
            	return 'http://www.g.com/schemas/service/ep';
            }else if (prefix == 'xsi') {
            	return 'http://www.w3.org/2001/XMLSchema-instance';
            }
        }  

        var result = parser.getXmlItem("//serv:message/serv:header/serv:response/serv:result",ns);
    
XPath to resolve the drawback is that only XMLDOM, can not resolve HTML; only XML to provide the most basic analytic function (the return node and nodeSet).