对一群Web开发者提到客户面xml时,其大多数都会想到微软的Internet Explorer,以及MSxml2与MSxml3中的二者之一。但就客户面xml支持其本身来说,如今我们多了一种名为Gecko的选择。不能仅仅因为没有人在你面前赞扬Mozilla和 Netscape的xml支持特性就认为这样的支持并不存在。事实上,Gecko支持xml, XSLT, XPath, xmlHTTP, SVG (Scalable Vector Graphics) 和MathML。仅存的遗憾在于Gecko的xml支持特性几乎无人知晓,而我希望通过我的努力使此局面有所改善。
由于Gecko像xml data islands一样,并不依赖于非标准扩展名,所以唯一调用Gecko的xml强大功能的方法是使用JavaScript (ECMAScript)。这样使用JavaScript其中一个优点在于如果在试图获得一种方法时出了问题,这时常会有另一种方法完成这项工作。另一个例子是第一次装载xml文档会相对简单。在我使用Mozilla时,我发现了三种无需费多少劲便可装载一个xml文档的方法。
第一种方法是强制编译文档。这类文档使用xml DOM程序化地创建了xml文档节点。这种方法的问题在于如Listing A所示,它不够灵活。对文档的每次改变都需要更改JavaScript。当这项工作会在几年后引发工作安全问题时,谁还会想要?
第二种装载xml文档的方法更常见些,即简单的使用xml DOM的装载方法。这有点类似于装载Microsoft MSxml,但仍有所不同。第一点区别在于Gecko既不支持微软的async extension也不支持xml DOM。所以,不同于JavaScript停下来“玩儿手指”般等待文档装载或检查readystate,Gecko使用一种事件装载处理程序。一旦如Listing B 所示,文档被装载并能继续处理下去,事件装载处理程序就开始工作。
最后装载xml文档的方法是针对象我这样打算让JavaScript能“玩儿手指”般等待文档装载者的。没有使用装载的办法,xmlHTTP被用来如 Listing C 所示载入文档。其结果非常类似于微软的async特性。
不管使用什么方法,当xml文档已经被装载后,现在的问题是怎样处理它?由于Gecko支持XSLT,一种办法是迅速创建XHTML以大幅增加DHTML的动态部分。另一种可能是使用SOAP来访问服务器上的Web服务。从根本上看,下一步做什么的唯一限制只是你的想象力。