使用Xalan进行XSLT程序设计

--XSLTC


  1. 什么时候需要进行XSLT程序设计
  2. 关于IE5和Mozilla的基本背景知识
  3. Tomcat和jdk1.3的配置
  4. 第一个使用Xalan的程序的例子
  5. 术语与背景知识
  6. 使用javascript及其他语言扩展XSL
  7. 使用java扩展XSL
  8. 使用Xalan的命令行工具
  9. 在Applet中使用Xalan
  10. 调试(debug)一个xslt文档
  11. XSLTC
  12. DTM

XSLTC技术可以把XSLT文件编译成一个或者多个Java的class文件,通过这种方式可以加速xsl的转换速度。这些class或者class的集合成为Translet。整个的技术成为xsltc, 既xslt compiler,或者xslt compiling。

使用命令行编译xsltc

首先我们介绍如何使用xsltc的命令行工具编译xls文件。xsltc的命令行工具大概可以理解成类似gcc的东西,就是使用java做的。基本的使用语法为

java org.apache.xalan.xsltc.compiler.XSLTC
[-o <output>] [-d <directory>] [-j <jarfile>]
[-p <package name>] [-u] <stylesheet>
当不使用参数时,输出的结果为一个或者一组于xsl文件同名的class文件。参数及使用如下表。

参数 使用说明
-o

指明输出的结果的.class文件名。 例如-o hello 输出结果可能为hello.class hello$0.class hello$1.class等等。
-d

制定输出结果的目录,如果不指定则为当前目录。
-j

指定输出结果为一个jar文件。
-p

指定输出结果的包的名字,输出时会相应创建相关的目录。
-u 制定xsl文件的url。

大家可能看不太懂,我们用一个例子来说明就是

java org.apache.xalan.xsltc.compiler.XSLTC -j hello.jar hello.xsl

会在当前目录下生成一个hello.jar文件,这个文件里包含了从hello.xsl文档翻译而来的.class文件。

在命令行运行translet

在命令行运行translet的基本命令是

java org.apache.xalan.xsltc.runtime.DefaultRun [-j jarfile] {-u <document_url> | <document>} <class> [<name1>=<value1> ...]

如果大家又看不太懂,我们用一个例子来说明就是。

java org.apache.xalan.xsltc.runtime.DefaultRun a.xml hello

尽管使用说明说可以使用-j指定jar 文件,我发现到目前为止(D10版)还不能使用这个参数。必需要把translet放进classpath才可以,而且我没能成功地在当前目录使用这个这个命令。但愿这只是一个bug,在最后发行版本会提供修正。

在TrAX/JAXP中使用Translet

在TrAX和JAXP中使用Translet地功能我们需要设定javax.xml.transformer.TransformerFactory 这个系统属性。具体地例子可以看这个程序。这个程序演示了如何使用TrAX的插入机制动态设定TrAX使用Translet来进行解析。这个程序在jdk1.3.1+Xalan 2.2D10版本下调试通过。这里需要注意的是Xalan提供的英文文档中有错误,在程序里面有说明。

直接调用XSLTC

我们还可以写程序直接调用XSLTC的功能。但是我的程序还没有调出来,好像是jdk的设置方面的问题,我的机器里目前有好几个版本的xalan,有的没有xsltc,我现在不知道javac用的是哪一个,不停的告诉我找不到org.apache.xalan.xsltc.Translet。呵呵。”再不出来,format c!"

XSLTC的不足之处

目前xsltc还不能很好地支持扩展。所以请不要用扩展xsl文档进行试验。我试验地结果是什么都没有发生。什么都没有,没有结果,没有错误信息,程序静悄悄地结束了。呵呵。