3.2. xslt参数的使用

param(参数)在xslt转换样式表中用得很多,它的主要作用相当于函数中的参数一样,在xslt样式表中做为template(模板)过程的参数。在模板处理时,可以指定参数值,从而改变模板过程输出的结果。你不太明白没关系,只要知道,在DocBook的转换中(即将XML转换为其它格式),通过指定参数就可以改变输出结果。在解开的docbook-xslt压缩包中的doc子目录下就有详细的参数说明,详细列出了在xslt中用到的参数的说明。在这里只介绍我用过的一些参数,请参阅xslt的文档以了解更多关于参数的信息,从而调整你的输出结果。

3.2.1. 在命令行中指定参数

参数可以在命令行中指定

例 3.1. 命令行中指定参数

java -classpath %CLASSPATH% com.icl.saxon.StyleSheet -o myfile.html \
myfile.xml myfile.xsl use.extensions=1

其中use.extensions=1就是我们所指定的参数。等号前是参数名,等号后是参数值。如果有多个参数则依次列出来即可,中间用空格分开。

那么当参数很多时,都放在命令行上就不方便了,那么这时我们可以使用驱动样式表文件。把要用的参数放在这个样式表中就很方便了。

3.2.2. 在驱动样式表中使用参数

为什么叫驱动样式表,因为它不是真正包含转换信息的xslt样式表,而是一个封装。比如我们要将XML文档转换成多个HTML文件,那么我们就要用过下载的docbook-xslt中的html/chunk.xsl转换样式表。可是我们还有一些特殊的要求,因此要用到参数。因为docbokk样式表是一个标准,所以不能修改它,那么我们可以自已写一个样式表,在其中调用它,然后再加入我们要用到的参数即可。因此它的作用只是起到一个引导的作用,所以叫驱动样式表。

下面是我为了生成本教程所用到的驱动样式表内容,看不懂没关系,一会儿我们就会讲到它:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:import href="../docbook-xsl/html/chunk.xsl"/>

<xsl:param name="saxon.character.representation" select="'native'"/>
<xsl:param name="l10n.gentext.language" select="'zh_cn'"/>
<xsl:param name="admon.graphics" select="1"/>
<xsl:param name="base.dir" select="'html/'"/>
<xsl:param name="chunker.output.indent" select="'yes'"/>
<xsl:param name="section.autolabel" select="1"/>
<xsl:param name="section.label.includes.component.label" select="1"/>
<xsl:param name="html.stylesheet" select="'docbook.css'"/>
<xsl:param name="table.borders.with.css" select="1"/>
<xsl:param name="use.extensions" select="1"/>
<xsl:param name="tablecolumns.extension" select="1"/>
<xsl:param name="bibliography.numbered" select="1"></xsl:param>
<xsl:param name="generate.toc">
appendix  toc
article/appendix  nop
article   toc,title
book      toc,title
chapter   toc,title
part      toc,title
preface   toc,title
qandadiv  toc
qandaset  toc
reference toc,title
sect1     toc
sect2     toc
sect3     toc
sect4     toc
sect5     toc
section   toc
set       toc,title
</xsl:param>

</xsl:stylesheet>

请注意前面第4行的 xsl:import命令,它将导入真正用来处理XML的xsl文件名,请按你实际的目录情况进行修改。