如何使用frontend-xslt在模板中声明参数/变量

时间:2010-08-19 10:30:59

标签: xslt

我打电话给这样的模板:

<xsl:call-template name="trip_form">
   <xsl:with-param name="header" select="'Spara din resa'" />
   <xsl:with-param name="size" select="'savetrip'" />
  </xsl:call-template>

templte看起来像这样:

<xsl:template name="trip_form">
  <xsl:param name="type" />
  <xsl:param name="size" />
  <xsl:param name="header" />
  <xsl:if test="type = ''">
   <xsl:if test="/root/meta/url_params/has_car = 1">
    <xsl:with-param name="'type'" select="'driver'" />
   </xsl:if>
   <xsl:if test="/root/meta/url_params/has_car = 0">
    <xsl:variable name="'type'" select="'passenger'" />
   </xsl:if>
  </xsl:if>

等...

当我在调用模板时指定$ type变量时,我想使用该值,但是当我不这样做时,我想检查Url_params / has_car节点并相应地设置变量,我该怎么做? / p>

2 个答案:

答案 0 :(得分:2)

初始设置参数或变量后,无法更新该值。但是,您可以做的是创建一个新变量,并根据是否设置了原始参数$ type来设置它。

尝试这样的事情。这将创建一个新变量$ newtype,然后您可以在模板中使用该变量。如果设置了$ type,那么$ newtype将等于$ type,否则它将查看Url_params / has_car元素

<xsl:template name="trip_form">
   <xsl:param name="type"/>
   <xsl:param name="size"/>
   <xsl:param name="header"/>
   <xsl:variable name="newtype">
      <xsl:choose>
         <!-- Check if type is defined -->
         <xsl:when test="$type = ''">
            <!-- Determine if a driver or passenger -->
            <xsl:choose>
               <xsl:when test="/root/meta/url_params/has_car = 1">
                  <xsl:value-of select="'driver'"/>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:value-of select="'passenger'"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:when>
         <xsl:otherwise>
            <!-- Use value of parameter -->
            <xsl:value-of select="$type"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:variable>

   <!-- Use the new variable $newtype here -->
   <xsl:value-of select="$newtype"/>
</xsl:template>

答案 1 :(得分:0)

如果要为param定义默认值,只需将其添加到param声明中即可。例如:

<xsl:template name="trip_form"> 
    <xsl:param name="type"> 
        <xsl:choose> 
           <xsl:when test="/root/meta/url_params/has_car = 1">driver</xsl:when> 
           <xsl:otherwise>passenger</xsl:otherwise> 
        </xsl:choose> 
    </xsl:param> 
    <xsl:param name="size"/> 
    <xsl:param name="header"/> 
</xsl:template> 

或者:

<xsl:template name="trip_form"> 
    <xsl:param name="type" 
               select="substring('passengerdriver',
                                 1 + 9 * (/root/meta/url_params/has_car = 1),
                                 9 - 3 * (/root/meta/url_params/has_car = 1)"> 
    </xsl:param> 
    <xsl:param name="size"/> 
    <xsl:param name="header"/> 
</xsl:template>