使用Xalan进行XSLT程序设计
--XSLTC
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文档进行试验。我试验地结果是什么都没有发生。什么都没有,没有结果,没有错误信息,程序静悄悄地结束了。呵呵。