我的XML就像这样
<filters>
<ISP_WebItem FILTER="Type" FILTERNAME="Malet" UNITCODE="" />
<ISP_WebItem FILTER="Mængde" FILTERNAME="500" UNITCODE="g" />
<ISP_WebItem FILTER="Anvendelse" FILTERNAME="Kaffemaskine" UNITCODE="" />
</filters>
我循环遍历每个过滤器并在单独的表行上打印,我的代码是这样的。
<xsl:variable name="grouped-filt">
<xsl:for-each select="exslt:node-set($filt)/filters">
<xsl:apply-templates select="ISP_WebItem[generate-id() = generate-id(key('itemByFilter', @FILTER)[1])]" />
</xsl:for-each>
</xsl:variable>
<xsl:template match="ISP_WebItem">
<tr>
<td width="200px">
<xsl:value-of select="@FILTER" />
</td>
<td>
<xsl:for-each select="key('itemByFilter', @FILTER)">
<xsl:if test="position() > 1">,</xsl:if>
<xsl:value-of select="@FILTERNAME" />
<xsl:if test="@UNITCODE != ''">
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITCODE"/>
</xsl:if>
</xsl:for-each>
<xsl:text> </xsl:text>
</td>
</tr>
</xsl:template>
现在我需要的是为每个打印的tr获取替代类。 示例
<tr class="odd">data</tr>
<tr class="even">data</tr>
<tr class="odd">data</tr>
<tr class="even">data</tr>
任何人都可以给我看路径吗?
注意:1-above代码用于不同目的,例如对所有过滤器进行分组。 2 - 我不能将JavaScript用于此目的。
答案 0 :(得分:2)
您可以直接在模板中使用位置功能,方法与您在for-each
中使用它的方式类似:
<xsl:template match="ISP_WebItem">
<tr>
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="(position() mod 2) = 0">even</xsl:when>
<xsl:otherwise>odd</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
position()
基于调用apply-templates
选择的节点列表,即给定
<xsl:apply-templates select="ISP_WebItem[generate-id() = generate-id(key('itemByFilter', @FILTER)[1])]" />
此选择的文档顺序中的第一个ISP_WebItem
将包含position() = 1
,第二个position() = 2
,依此类推。
答案 1 :(得分:1)
我认为可以使用像这样的一些JavaScript
$(document).ready(function(){
$(".pdfgrid tr:even").addClass('even');
$(".pdfgrid tr:odd").addClass('odd');
});
答案 2 :(得分:1)
尝试:
<xsl:when test="position() mod 2">
</xsl:when>