#css #xslt
#css #xslt
Вопрос:
как я могу отобразить текст внутри цикла for-each в xslt, используя каждый раз другой класс css? могу ли я каким-либо образом сгенерировать имя класса css на основе какой-либо переменной или чего-то еще?? возможно ли это? например, в следующем коде внутри цикла foreach могу ли я каждый раз отображать li с другим классом css … например, в первой итерации li class=»1″ … во второй итерации li class=»2″ … и очевидно, что в css существует li.1{..}, li.2{…}
<xsl:output method="text" indent="no"/>
<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:text>Collections of books</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:variable name="index" select="0"/>
<xsl:for-each select="collection/book">
<xsl:sort select="category"/>
<xsl:variable name="lastCat" select="category"/>
<xsl:if test="not(preceding-sibling::book[category=$lastCat])">
<xsl:value-of select="$newline"/>
<xsl:value-of select="category"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
</xsl:if>
<ul>
<li>
<xsl:value-of select="title"/>
<xsl:text> </xsl:text>
<xsl:value-of select="author"/>
<xsl:text> </xsl:text>
<xsl:value-of select="year"/>
<xsl:text> </xsl:text>
<xsl:value-of select="isbn"/>
</li>
</ul>
<xsl:value-of select="$newline"/>
</xsl:for-each>
</xsl:template>
Комментарии:
1. Что? Можете ли вы быть более конкретным? Может быть, показать пример желаемого результата?
Ответ №1:
Ваш XSLT немного сбивает с толку относительно того, выводите ли вы текст или html. Однако, в ответ на ваш непосредственный вопрос, вы можете легко добавить атрибуты к существующим элементам li, которые вы выводите, одним из двух способов.
Во-первых, вы можете использовать инструкцию xsl:attribute , которая должна быть добавлена сразу после тега li.
<li>
<xsl:attribute name="class">
<xsl:value-of select="position()" />
</xsl:attribute>
...
Однако лучшим методом является использование «шаблонов значений атрибутов» для указания атрибутов. (Фигурные скобки указывают AVT, который должен быть оценен в этом случае, в отличие от фрагмента текста, который должен быть буквально выведен)
<li class="{position()}">
...
В обоих случаях результат будет похож на следующий
<li class="1">...
<li class="2">...
В этом примере я просто использую position(), чтобы продемонстрировать, как вы можете устанавливать атрибуты, но вы могли бы легко использовать переменные, если требуется.
<li class="{$classname}">