我打电话给这样的模板:
<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>
答案 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>