<xsl:param>元素用于声明局部或全局变量
<xsl:param
name="name" //参数的名称
select="expression">
<xsl:variable>元素被用来声明局部和全局变量。如果被声明为顶层元素,则改变量是全局的,而如果在模板内声明,则变量是本地的。
一旦你设置了变量的值,就无法改变或者修改该值。
变量的定义 的几种形式
1 , <xsl:variable name="test" > data</xsl:variable>
定义了一个变量 变量名为test test的值为data
2,<xsl:variable name="teest"/>
定义了一个变量 变量名为test 其值为空。
3,可以用<xsl:variable>元素的内容或通过select属性,像变量添加值。
<xsl:variable name="color" select="'red'">
定义了一个变量color,并且赋值为red。
综合上述:
</xsl:variable>相当于C中的const ,一段变量建立,就无法修改。
如果使用变量:
<xsl:copy-of select="$test">
<xsl:value-of select="$ttest">
就可以使用test变量了。
对于XML模板来说,name属性是很关键的 call-template /apply-templat的name属性必须要和模板的name属性想对应。模板相当于一个函数,而name相当于函数名称。
在call-template中,使用xsl:with-param相当于函数参数输入。而参数声明就相当于xsl:template的xsl:param
<xsl:param>元素:声明一个命名的参数,在<xsl:stylesheet>元素或者<xsl:template>元素中使用。允许指定默认值。
基本语法:
<xsl:param>
name = Qname //必选,指定参数的名称
select= Expression //属性表达式的,变量值为计算该表达式得出的对象。指定此属性后,<xslParam>元素必须是空的
</xsl:param>
<xsl:param>元素上指定的值是绑定的默认值。如果调用的模板或样式表包含<xsl:param>,传递的参数将替代默认值。
<xsl:param>元素必须声明为<xsl:template>元素的直接子级,如果未声明为直接子级,<xsl:param>元素的值将无法访问,并且出错。
例如:
<xsl:template name="getcount">
<xsl:element name="strong">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
Total Bookl Count <xsl:value-of select="$counted" />
</xsl:element>
</xsl:tempalte>
在上例中,<xsl:template>元素的唯一直接子级是<strong>元素。因此,分析器无法正确计算<xsl:param>元素的值,并产生一下错误:此处不能使用关键字xsl:param.
为了使元素可以在<xsl:template>元素的上下文中计算,正确的方式如下:
<xsl:template name="getcount">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
<xsl:element name="strong">
Total Book Count<xsl:value-of select="$counted" />
</xsl:element>
</xsl:template>
参数值可以是任何表达式可以返回的类型的对象。<xsl:param>元素可以通过下面的3中方法指定变量的值:
如果元素具有select属性,属性值必须是表达式,参数值是计算该表达式得出的对象。此种情况下,元素的内容必须为空。
如果没有select属性,并且包含非空的内容,例如:一个或者多个节点,内容将指定该值。内容是通过实例化为参数指定值的模板。值是结果输的一个片段,等效于只包含一个根节点,将通过实例化该模板生成的节点序列作为子节点的节点集。该结果树片段中的节点的基是URI
<xsl:with-param>元素
该元素传递一个参数给模板。
<xsl:with-param
name= "name" //参数的名称
select=Expression //指定用来匹配当前内容的表达式。没有默认值,如果没有内容,那么就会产生一个空的字符串。
>
</xsl:with-param>
</xsl:with- param>元素允许在<xsl:call-template>和<xsl:apply-templates>中使用,参 数的赋值方法和<xsl:variable><xsl:param>类似。
<?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- These 2 elements effectively assign $messages = resources/en.xml/<messages>, then $messages is used in the "localized-message" template. --> <xsl:param name="lang">en</xsl:param> <xsl:variable name="messages" select="document(concat('resources/', $lang, '.xml'))/messages"/> <xsl:template name="msg23" match="msg23"> <xsl:call-template name="localized-message"> <xsl:with-param name="msgcode">msg23</xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="localized-message"> <xsl:param name="msgcode"/> <!-- Show message string. --> <xsl:message terminate="yes"> <xsl:value-of select="$messages/message[@name=$msgcode]"/> </xsl:message> </xsl:template> </xsl:stylesheet>
上面的例子中,我们在<xsl:call-template name="localized-message">里面用with-param声明了一个参数.然后在模板中使用
<xsl:param name="msgcode">来调用这个参数。
感觉with-param和param两个有点类似参数的赋值和调用。