XSL内部for-each使用不同的CSS类



如何在xslt中使用不同的css类在for-each循环中显示文本?我能以某种方式生成css类的名称基于一些变量或其他东西吗?这可能吗?例如,在下面的代码中,在foreach循环中,我可以每次用不同的css类显示li吗?例如在第一次迭代中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>

您的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}">

最新更新