2013-03-20 17 views
0

數據來自服務器,通常是兩行,但有時更多。所以我試圖讓列表動態變化。xsl 1.0,計數是否超過2個元素,然後更改css類

<xsl:template match="Event"> 
     <ul class="lines"> 
      <xsl:apply-templates select="Line"/> 
     </ul> 
    </xsl:template> 

<xsl:template match="Line"> 
     <li class="something"> 
      <a href=""> 
       <span class="result"><xsl:value-of select="@result"/></span> 
       <span class="odds"><xsl:value-of select="@odds"/></span> 
      </a> 
     </li> 
    </xsl:template> 

我都數不過來「禮」的數量,如果它超過2,我不得不改變類「禮」

回答

1

在與Line匹配的模板中,您可以使用last()函數(該函數返回由確定的「當前節點列表」中最後一個節點的索引號)訪問此Event內的Line個元素的總數表示導致該模板被觸發的apply-templates,在這種情況下是特定Event的子集的Line的集合)。

<li> 
    <xsl:attribute name="class"> 
    <xsl:choose> 
     <xsl:when test="last() &lt;= 2">something</xsl:when> 
     <xsl:otherwise>somethingElse</xsl:otherwise> 
    </xsl:choose> 
    </xsl:attribute> 
1

的怎麼樣是這樣的:

<xsl:template match="Event"> 
    <ul class="lines"> 
     <xsl:apply-templates select="Line"/> 
    </ul> 
    </xsl:template> 

    <xsl:template match="Line" name="Line"> 
    <xsl:param name="classVal" select="'something'" /> 
    <li class="{$classVal}"> 
     <a href=""> 
     <span class="result"> 
      <xsl:value-of select="@result"/> 
     </span> 
     <span class="odds"> 
      <xsl:value-of select="@odds"/> 
     </span> 
     </a> 
    </li> 
    </xsl:template> 

    <xsl:template match="Line[count(../Line) > 1]"> 
    <xsl:call-template name="Line"> 
     <xsl:with-param name="classVal" select="'somethingElse'" /> 
    </xsl:call-template> 
    </xsl:template>