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). 






