由于Javascript加载并解析XML文档是一个很重要的操作,最近一直尝试写。我自己写了一个测试,发现兼容性的问题很多。基本分为三类:IE,Netscape,Chrome。Chrome虽然是标准浏览器,但是与Netscape这类又不相同。
废话不说,看代码吧
(xmlDoc是一个已创建的XML DOM)
try{
xmlDoc.load(”url/test.xml”);//loading XML for IE and Netscape
}
catch(e)//loading XML for Chrome
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(”GET”,” url/test.xml “,false);
xmlhttp.send(null);
xmlDoc=xmlhttp.responseXML;
}
对于IE和Netscape,均可以对XML DOM采用load方法加载。但是Chrome并不支持这一方法,于是用了AJAX的方式返回这个XML。
当时测试的时候,Chrome一直报告这个对象不存在这个方法。
Chrome Help Forum也有人提出了这个问题,以上的解决方案就来源于Pauan的解答,非常感谢Pauan。
解析也有浏览器的问题,解决如下:
function parseXML(doc)//parse the XML document named ‘doc’
{
if(window.ActiveXObject)//if the browser is IE
{
return doc.xml;
}
else//the browser is not IE
{
var oSerializer=new XMLSerializer();//new object XMLSerializer
return oSerializer.serializeToString(doc,’text/xml’); }
}
通过测试的浏览器:Firefox,IE5.5,6,8(没有测试IE7是因为我的IE Tester的IE7选项有点问题,抱歉),Opera,Chrome,Safari。
最后是创建XML DOM,这个比较简单。代码如下:
if(window.ActiveXObject)//for IE
{
var versions=["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];
for(var i=0;i<versions.length;i++)
{
try{
var xmlDoc= new ActiveXObject(versions[i]);//create XML DOM
}
catch(e){}//failed
}
}
else
{
Var xmlDoc=document.implementation.createDocument(”,”,null);
}
目前就是这样,心得体会是,要学会使用Console,它让你知道你的程序究竟有什么问题。