用JavaScript扩展Microsoft XSLT处理器

ZDNet软件频道 时间:2003-02-27 作者:周靖 译 |  我要评论()
本文关键词:
微软的XSLT处理器(MSXML)提供大量内建函数,可用微软提供的JavaScript版本——JScript——来编写自己的方法,从而扩展这一功能。

微软的XSLT处理器(MSXML)提供大量内建函数,它们划分为以下类别:

  • 数据类型转换
  • 算术,字符串处理
  • 集合
  • XML文档相关函数

此外,还可用微软提供的JavaScript版本——JScript——来编写自己的方法,从而扩展这一功能。但令人遗憾的是,要想执行你的扩展函数,必须解决大量问题,比如可能存在不同版本的MSXML。还需要在XML解析器面前隐藏JavaScript,使大于和小于比较运算能够进行,同时依然保持XSLT的良构状态。最后还得面对一个事实:没人真正费心将编写扩展函数的方式文档化。

Internet Explorer 5.0和更高的版本支持MSXML,但默认情况下,那个支持是针对版本2.0的,而MSXML的最新版本是4.0。版本2.0的MSXML只支持XSLT的工作草案。这意味着你要么强迫用户从微软下载MSXML 4.0,要么使用功能有限的XSLT的工作草案版本来编程,要么在服务器端进行转换。

除非开发一个内部网应用程序(你在其中可获得完全的控制),否则第一种方案不现实。由于MSXML 4.0不支持XSLT工作草案,所以第二种方案需要两个XSLT文档:一个用于版本2.0,另一个用于版本3.0或4.0。最后一种方案只适用于在服务器端执行的特定类型的转换。例如,要将ADO记录集转换成HTML select标记,就可在存放记录集的服务器端进行。

虽然编写扩展函数的过程尚未进行良好文档化,但通过不断试验和出错,也能了解一个大概。下面来看看我写的函数,并讨论我遇到的一些问题。

为加快速度而扩展MSXML

我扩展MSXML函数惟一的目的就是加快速度。我有许多大型XHTML select对象,它们相互依赖。选中一家特定的公司,可用产品就仅限于那家公司。此外,所选的产品决定了可用的型号。但我不希望公司或产品每次改变时,都去查询数据库。相反,我决定为存储在各自表格中的每种产品和型号都构造一个XHTML select对象,以后只显示相关的信息。

为确定公司、产品和型号的关系,我使用了option标记的value和id属性。来自公司(division)select对象的value属性对应来自产品(product)select对象的id属性。而且value属性对应来自型号(model)select对象的id属性。这样就可根据具体选择来动态改变选项。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134