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,但是越是羞于谈论就越是没法学习了,所以上面这些就是我前阵子一直在学习的东西,贴出来,希望高人路过的时候能给一些指点。

本站不欢迎全文转载,如需转载请阅读本站版权声明

http://kaix.in/cgi-bin/mt-tb.cgi/930. Tips:在自己blog里发表针对本文的评论文章时复制上述地址到引用通告栏,你的文章链接就会显示在本页引用列表里。

Read Comments

wayne
2009-01-11,18:30

俨然一个JS高手...

“回复之...”

Shawn
2009-01-11,18:31

你是不是找到老代码了? "xmlHttp = new XMLHttpRequest();" 好久了都。

另外在 firefox 看到格式化的效果还是有些问题。XSLT 我啥都不懂。

“回复之...”

dimlau
2009-01-12,00:36

@ wayne:

假象而已,我依然是个菜鸟。
@Shawn firefox的显示问题还没解决。
@Shawn & wayne 懂且仅懂这么一点点用JS操作xml、xslt的方法,因为我只找了这方面的资料看。

“回复之...”

Many Thanks

Submit comment

必填
必填

评论须知

  1. 我女儿以后也会来看我的blog,请不要让超过PG-13限制的内容出现在本站;
  2. 请尽量把自己要表达的内容一次性表达清楚,我有强迫症,看不懂的内容会让我抓狂;
  3. 评论内容不支持 HTML,你可以使用 Textile 语法来表现一些高级格式。
  4. 由于网速等原因,点击发布后有可能需要几秒钟的时间响应,请务必只点一次发布按钮