扩展样式表单转换语言(XSLT)规定了将一份XML文档转换为另一份不同的XML文档或其它文档(如HTML文档)的规则。为了理解它是怎样工作的,我们用典型的ASP方法-循环查找整个记录集来创建一个HTML选项。其代码如Listing A所示。
看起来很熟悉吗?Listing A里的程序使你觉得很自然吧。Listing B向你演示了怎样用XML和XSLT来获得同样的效果。
就好像变魔术一样,不是吗?没有循环结构,没有move next语句-但它们的工作原理却不是那么显而易见的,哪怕你对XML很熟悉。那么,就让我们一行一行地来分析它究竟做了些什么:
整个过程好像看起来太简单了?好,我对第三行和第四行-将记录集保存为XML格式并且装入XSLT记录集,作部分解释。将记录集保存为XML格式是直截了当的操作,但是保存后到底变成什么样子却不是那么清楚。
当你将记录集保存为XML时,ADO将记录集的名字空间和结构描述都包含进来,还有那些记录集里的记录行。一开始,所有这些信息好像显得太多了。另外,每一个记录行都被保存为具有单独属性列的XML元素。然而这不是问题所在,当书写XSLT时记住这些规则会使文档安排得更好。
知道了这些,让我们抓住第四行。XSLT将XML转换成另一种类型的文档。一个大的区别是为XSL的名字空间附加的xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”,它把以xsl:开头的标注识别为XSLT的指令、元素和属性。由于我们使用的是XML文档并且是从ADO的记录集开始的,那这份样式表单就需要更多的名字空间,因此产生了Listing C那样的代码。
如果你想使用ADO记录集,你都得像这个例子这样开始。如果你想建立一个HTML选项或者表单,你也要从这里开始。more goes here处是真正的关键;建立HTML选项和表单的逻辑就在这里。
在Listing D中,我们又回到了Listing C的<!--more goes here-->处。
改变more goes here处的内容,可以得到不同的结果。你可以生成一个HTML表单来替代HTML选项。例如,Listing E中的代码可以生成一个包含由不同数字组成的列的表单。如果记录集有两列,表单就有两列;如果记录集有五列,表单也会有五列。不论记录集包含多少列,表单的列数都和它相同。这个例子设计上唯一的缺点是,它不能处理具有空列数的源记录集。
ADO、XML和XSLT的运用使我们的代码具有了巨大的灵活性。我的例子是用VBScript书写的,并运行在一台服务器上,但是你可并没有被限制在一种特定的平台上。例如,一旦ADO记录集被保存为XML格式,它就能被传送到客户端的浏览器上并被转换为HTML格式。所以,我们可以很容易地理解为什么XML与XSLT一起能够迅速地成为联机业务的宠儿。