У меня есть XSLT, где я хочу чередовать цвета строк выходной таблицы. Я знаю, что вы можете использовать код, такой как в этом примере:
<table>
<tr>
<td>Name</td>
<td>ID</td>
</tr>
<xsl:for-each select="//Book">
<xsl:variable name="altColor">
<xsl:choose>
<xsl:when test="position() mod 2 = 0">#FFFFFF</xsl:when>
<xsl:otherwise>#D3DFEE</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr bgcolor="{$altColor}">
<td><xsl:value-of select="current()/@name"/></td>
<td><xsl:value-of select="current()/@ID"/></td>
</tr>
</xsl:for-each>
</table>
, который работает нормально, однако, у меня есть несколько случаев, когда мне нужно включить некоторые операторы if в for-each, например.
<table>
<tr>
<td>Name</td>
<td>ID</td>
</tr>
<xsl:for-each select="//Book">
<xsl:variable name="altColor">
<xsl:choose>
<xsl:when test="position() mod 2 = 0">#FFFFFF</xsl:when>
<xsl:otherwise>#D3DFEE</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="current()/@ID > 10000 and current/@ID < 6000">
<tr bgcolor="{$altColor}">
<td><xsl:value-of select="current()/@name"/></td>
<td><xsl:value-of select="current()/@ID"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
Тогда это не сработает, потому что он может пропустить элемент в позиции для каждого, и я получаю случайно чередующиеся цвета строк, или он может начинаться с неправильной позиции, где строки чередуются, начиная с неправильного цвета.
Я попытался добавить xsl: sort, который на самом деле не решает проблему. Есть ли способ избежать этой загадки?