Проблема в том, что вам нужно использовать xsl:element
, чтобы xsl:attribute
работал правильно. Вы не можете установить атрибут статического элемента. Вы должны получить xslt для генерации элемента для вас.
<xsl:sort select="../name" />
<xsl:if test="@category[. = $solName]">
<!-- use xsl:element to create an element -->
<xsl:element name="tr">
<xsl:if test="position() mod 2 = 1">
<!-- then xsl:attribute will function as expected -->
<xsl:attribute name="bgcolor">#e7e7e7</xsl:attribute>
</xsl:if>
<!-- snip -->
</xsl:element>
</xsl:if>
</xsl:for-each>
Я бы предложил использовать имена классов и css (цвет фона) вместо встроенных стилей:
<xsl:sort select="../name" />
<xsl:if test="@category[. = $solName]">
<!-- use xsl:element to create an element -->
<xsl:element name="tr">
<xsl:if test="position() mod 2 = 1">
<!-- then xsl:attribute will function as expected -->
<xsl:attribute name="class">alternateRow</xsl:attribute>
</xsl:if>
<!-- snip -->
</xsl:element>
</xsl:if>
Пример CSS (для моего альтернативного решения):
.alternateRow { background-color: #e7e7e7; }
Кроме того, вам не нужно ставить скобки вокруг ваших тестов. Если у меня есть несколько тестов, я заключаю их в круглые скобки для удобства чтения, но только с одним условным парентезом обычно не добавляются.