firefox兼容ie读取xml节点方法的解决方案实例
<html><head><title>Firefox中Javascript读取XML数据selectSingleNode实例</title><style>body,p{font:normal 12px/180% "宋体";}</style><script type="text/javascript">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 implementationif( 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 implementationif( 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";} }}}function loadXML(){ var xmlHttp; var name; if(window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } try { xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { // 取得XML的DOM对象 var xmlDOM = xmlHttp.responseXML; // 取得XML文档的根 var root = xmlDOM.documentElement; try { var items = root.selectNodes("//urlset/url"); var msg = document.getElementById("msg1"); msg.innerHTML=""; for(var i=0;i<items.length;i++) { //取得XML文件中内容 var strloc = GetNodeValue(items[i].selectSingleNode("loc")); var strsite=GetNodeValue(items[i].selectSingleNode("site")); var straddtime=GetNodeValue(items[i].selectSingleNode("addtime")); msg.innerHTML+="<a href="+strloc+" target=_blank>"+strsite+"</a> 加入日期:"+straddtime+"<br/>"; } } catch(exception) { alert("error!"); } } } } xmlHttp.open("GET", "urllink.xml", true); xmlHttp.send(null); } catch(exception) { alert("您要访问的资源不存在!"); }}var xmlDoc;function getdata(){ if (window.ActiveXObject) { //IE xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.load("urllink.xml"); domsg(); } else if (document.implementation &&document.implementation.createDocument) {//FF xmlDoc= document.implementation.createDocument("","",null); xmlDoc.async=false; xmlDoc.load("urllink.xml"); xmlDoc.onload=domsg(); } else {alert('浏览器不支持脚本,无法加载XML文件'); } }function domsg(){var root = xmlDoc.documentElement; try{ var msg2 = document.getElementById("msg2"); var items = root.selectNodes("//urlset/url");msg2.innerHTML="";for(i=0;i<items.length;i++){ var strloc = GetNodeValue(items[i].selectSingleNode("loc")); var strsite=GetNodeValue(items[i].selectSingleNode("site")); var straddtime=GetNodeValue(items[i].selectSingleNode("addtime")); msg2.innerHTML+="<a href="+strloc+" target=_blank>"+strsite+"</a> 加入日期:"+straddtime+"<br/>";} } catch (exception){ msg2.innerHTML="加载XML数据错误!"; } }</script></head><body onload="getdata()"><h1>这是一个firefox兼容ie读取xml节点方法的解决方案实例</h1><div style="margin:10px auto"><h2>这里是实时读取xml文件节点</h2>可以用于Html文件读取 XML中的最新数据、广告数据等。<div id="msg2" style="width:500px;border:1px solid #e0e0e0; height:auto;margin:8px;padding:4px"><span>如果您看到这些内容,说明加载失败</span></div></div><div style="margin:10px auto"><h2>这里是ajax异步读取xml文件节点</h2>firefox模拟selectsinglenode方法获取xml数据,兼容ie,解决了一些一些网站的ajax在firefox下面无法显示的问题<br><a href="javascript:loadXML();" ><B>点击加载XMl</B></a>:<br><div id="msg1" style="width:500px;;border:1px solid #e0e0e0; height:auto;margin:8px;padding:4px">请点击上面按钮加载XMl...</div></div>查看本页源代码,有相应的js, XML数据文件urllink.xml<br><textarea name="urllink" rows="6" cols="60"><?xml version="1.0" encoding="gb2312"?><urlset><url><site>思高数码</site><loc>http://www.cycoo.com</loc><addtime>2006-02-11</addtime></url><url><site>深南大道</site><loc>http://bbs.szroad.com</loc><addtime>2006-05-22</addtime></url><url><site>芒果网</site><loc>http://www.man-go.cn</loc><addtime>2007-01-21</addtime></url></urlset></textarea></body></html>?
<?xml version="1.0" encoding="gb2312"?><urlset><url><site>思高数码</site><loc>http://www.cycoo.com</loc><addtime>2006-02-11</addtime></url><url><site>深南大道</site><loc>http://bbs.szroad.com</loc><addtime>2006-05-22</addtime></url><url><site>芒果网</site><loc>http://www.man-go.cn</loc><addtime>2007-01-21</addtime></url></urlset>
?