xsl внутри для каждого использует разный класс css

#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}">