2016-08-12 3 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

Смежные вопросы