safari里用js读取xml的问题
@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()"/>来弥补。
一直以来我都觉得,问题如果不是自己有了很明确答案,就算是勉强解决了,把结果放到blog里来也会很露怯。所以一直我都很少在blog里谈及JS,但是越是羞于谈论就越是没法学习了,所以上面这些就是我前阵子一直在学习的东西,贴出来,希望高人路过的时候能给一些指点。
fin.
页面会变得很长么?期待。
wayne 2009-01-11,18:30 says: “回复”
俨然一个JS高手...
dimlau 2009-01-12,00:36 says: “回复”
假象而已,我依然是个菜鸟。
@Shawn firefox的显示问题还没解决。
@Shawn & wayne 懂且仅懂这么一点点用JS操作xml、xslt的方法,因为我只找了这方面的资料看。
Shawn 2009-01-11,18:31 says: “回复”
你是不是找到老代码了? "xmlHttp = new XMLHttpRequest();" 好久了都。
另外在 firefox 看到格式化的效果还是有些问题。XSLT 我啥都不懂。