2016-08-12 60 views
0

我不知道兩個知道是否有可能在模板內部帶兩個param?如果是的話如何?比如這一個:在一個模板中有兩個「參數」

<xsl:template name="formatDate"> 
    <xsl:param name="timeParam"/> 
    <xsl:param name="withYear"/> 
    <xsl:variable name="dateParam" select="substring-before($timeParam,'T')"/> 
    <xsl:variable name="year" select="substring($dateParam,1,4)"/> 
    <xsl:variable name="month" select="substring($dateParam,6,2)"/> 
    <xsl:variable name="day" select="substring($dateParam,9,2)"/> 
    <xsl:if test="string-length($day) = 1"> 
     <xsl:value-of select="'0'"/> 
    </xsl:if> 
    <xsl:value-of select="$day"/> 
    <xsl:value-of select="'.'"/> 
    <xsl:if test="string-length($month) = 1"> 
     <xsl:value-of select="'0'"/> 
    </xsl:if> 
    <xsl:value-of select="$month"/> 

    <xsl:if test="string-length($withYear) = 1"> 
     <xsl:value-of select="'.'"/> 
     <xsl:value-of select="'0'"/> 
     <xsl:with-param name="withYear" select="$year" /> 
    </xsl:if> 
</xsl:template> 

,並呼籲:

<xsl:call-template name="formatDate"> 
    <xsl:with-param name="timeParam" select="attribute::time"/> 
    <xsl:with-param name="withYear" select="1"/>      
</xsl:call-template> 
<xsl:call-template name="formatDate"> 
    <xsl:with-param name="timeParam" select="attribute::time"/> 
</xsl:call-template> 

正如你在某些位置看到我需要一年的參數,而在其他沒有。

Ps。使用兩個參數的原因是我不想複製代碼。

+0

@PhilRoss但它並不能幫助我更多。我需要通過'select'部分! – Saber

+1

你的問題不清楚。一個模板可以有你想要的參數。如果您在調用模板時未傳遞參數,則將使用默認值(在模板中定義)。 –

回答

0

我不確定你的問題到底是什麼。我很確定你的命名模板需要更改,因爲你不能有xsl:with-param作爲xsl:if的子版本。

我認爲不是:

<xsl:if test="string-length($withYear) = 1"> 
    <xsl:value-of select="'.'"/> 
    <xsl:value-of select="'0'"/> 
    <xsl:with-param name="withYear" select="$year" /> 
</xsl:if> 

你應該有:

<xsl:if test="string-length($withYear) = 1"> 
    <xsl:value-of select="'.'"/> 
    <xsl:value-of select="$year"/> 
</xsl:if> 

或者乾脆:

<xsl:if test="$withYear"> 
    <xsl:text>.</xsl:text> 
    <xsl:value-of select="$year"/> 
</xsl:if> 
+0

非常感謝。我做了這樣的錯誤。你是完全正確的。 – Saber