<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两个有点类似参数的赋值和调用。

 


收藏
0个人 收藏