try{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e){
try{
xmlDoc=document.implementation.createDocument("","",null);
}
catch(e) {alert(e.message)}
}
try{
xmlDoc.async=false;
xmlDoc.load("example.xml");
document.write("xmlDoc is loaded");
}
catch(e){
alert(e.message)
}
在网上能找到的用JS读取XML文件的脚本大多都是类似上面这个样子的。可气的是代码里一般都会有注释说可以兼容firefox、opera、safari、IE,其实经过我测试,这种代码根本不支持safari,同内核的chrome当然也不支持。
在safari里会报错:value undefined (result of expression xmlDoc.load) is not object
。在chrome里则报错:Uncaught TypeError: Object #<a Document> has no method 'load'
。
很奇怪在网上搜索报错内容几乎没有找到相关条目,即便是有那么一两条,也只是提出了问题没有给出解决办法。其实用XMLHttpRequest读取XML来避免使用xmlDoc.load()
方法就可以解决了。我不知道这是不是唯一的解决办法,总之我根据这个写了一段——这回在IE、opera、firexfox、safari/chrome里用JS都已经可以正常读取XML数据了——演示地址在这里。用到的JS脚本可以查看源代码来查看。
另外,我尝试着把读取到的数据用XSLT文件来格式化,然后显示出来。但是,firefox浏览器又遇到了我之前提到过的把<![CDATA[ ]]>
标签内容解释为HTML的障碍。而且,这回用上次提到的JS解决办法貌似不行,只能用<xsl:copy-of select="node()"/>
来弥补。
转贴网络博客
用于我的案子的code:jsreadxml