2011-11-09 20 views
1

我怎样才能显示在每个循环,在xslt,使用每次不同的css类的文本?我可以生成某种基于某个变量或某事的css类的名称?可能吗? 例如在foreach循环中的下面的代码中,我可以每次都显示一个不同的css类的li ...比如在第一次迭代li class =“1”... second iteartion li class =“2”。 ..和在CSS明显存在li.1 {..},li.2 {...}xsl里面为每个使用不同的css类

<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> 
+0

什么?你可以说得更详细点吗?也许显示一个期望的输出的例子? –

回答

0

你XSLT是是否你输出文本或HTML有点混乱。但是,回答您的直接问题,您可以使用以下两种方法之一轻松地将属性添加到您正在输出的存在元素中。

首先,你可以使用XSL 的:属性声明,应立即标签下添加。

<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}"> 
+0

谢谢,这就是我的意思 –

相关问题