2011-11-09 9 views
1

for eachループ内のテキストをxsltで、別のCSSクラスを使用してどのように表示できますか?どういうわけか、いくつかの変数や何かに基づいてCSSクラスの名前を生成できますか?出来ますか? たとえば、foreachループ内の次のコードでは、最初の繰り返しliクラス= "1" ... second second iteartion li class = "2"など、毎回異なるCSSクラスのliを表示できますか? CSSで明らかにli.1 {...}を存在..and、li.2 {...}xslのfor-eachで異なる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を出力しているかどうかの少し紛らわしいです。しかし、すぐに質問に答えるには、あなたが出力している要素liに2つの方法のいずれかで属性を簡単に追加することができます。 タグの直後に追加する必要があります属性文:

まず、あなたはXSLを利用することができます。

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

より良い方法は、属性を指定するために '属性値テンプレート'を使用することです。両方の場合において、出力は以下

<li class="1">... 
<li class="2">... 
と同様であろう

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

(テキストの一部であることとは対照的に、中括弧は、文字通り出力する、この場合、評価されるAVTを示します)

この例では、単にポジション()を使用して属性を設定する方法を示していますが、必要に応じて簡単に変数を使用できます。

<li class="{$classname}"> 
+0

ありがとうございました –

関連する問題