xsl里面for-each使用不同的css类

时间:2011-11-09 21:18:20

标签: css xslt

如何在xslt中显示for-each循环内的文本,每次使用不同的css类?我可以根据某些变量或某事以某种方式生成css类的名称吗?可能吗? 例如,在foreach循环中的以下代码中,我可以每次显示具有不同css类的li ...例如在第一次迭代中li class =“1”... second iteartion 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 个答案:

答案 0 :(得分:0)

对于您是输出文本还是HTML,XSLT有点令人困惑。但是,在回答您的直接问题时,您可以轻松地将属性添加到以两种方式之一输出的现有 li 元素。

首先,您可以使用 xsl:attribute 语句,该语句应立即添加到 li 标记之后。

<li>
   <xsl:attribute name="class">
      <xsl:value-of select="position()" />
   </xsl:attribute>
   ...

更好的方法是使用&#39;属性值模板&#39;指定属性。 (大括号表示在这种情况下要评估的AVT,而不是作为字面输出的文本)

<li class="{position()}">
    ...

在这两种情况下,输出将类似于以下

<li class="1">...
<li class="2">...

在这个示例中,我只是使用 position()来演示如何设置属性,但如果需要,您可以轻松使用变量。

<li class="{$classname}">