数据来自服务器,通常是两行,但有时更多。所以我试着让列表动态变化。
<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>
我必须计算"li"的个数,如果它大于2,我必须改变"li"的类
在匹配Line
的模板中,您可以使用last()
函数访问该Event
中Line
元素的总数(该函数返回由导致该模板触发的apply-templates
的select
表达式确定的"当前节点列表"中最后一个节点的索引号,在这种情况下是特定Event
的Line
子集合)。
<li>
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="last() <= 2">something</xsl:when>
<xsl:otherwise>somethingElse</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
这样如何:
<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>