「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
-
piglet
- 記事: 2
- 登録日時: 2007年12月13日(木) 13:46
投稿記事
by piglet » 2007年12月13日(木) 13:56
いつもお世話になっております。
リストの色を1行ずつ変えようと、以下のように記述しました。
コード: 全て選択
<xsl:for-each select="entry">
<xsl:if test="not(name_us='')">
<xsl:choose>
<xsl:when test="(position() mod 2) = 0">
<tr class="even">
<xsl:call-template name="linetable" />
</tr>
</xsl:when>
<xsl:otherwise>
<tr class="odd">
<xsl:call-template name="linetable" />
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
name_us項目による条件判断がなければ、これで1行おきにclassがevenおよびoddとなるのですが、name_us項目がある場合のみ抜き出しているので、position()を
使っているせいか、うまく1行おきになってくれません。
やりたいことは全データからname_us項目が設定されている物のみの一覧を作成し、それを1行おきに色分けしたいのですが。
以上よろしくお願い致します。
-
webmaster
- Site Admin
- 記事: 1451
- 登録日時: 2004年12月10日(金) 10:09
投稿記事
by webmaster » 2007年12月13日(木) 15:42
pigletさん、ご質問ありがとうございます。いつもお世話になっております。
position()が返す値は、for-eachのselectで指定された集合についての現在位置
の為、このようになっているのだと思われます。
select属性の内容を"entry"ではなく、"entry[not(name_us='')]"にしてみて
下さい。その場合、<xsl:if test="not(name_us='')">の部分は不要となります。
この方法はマニュアルには記載されておらず、ご面倒をおかけしまして
申し訳ありませんでした。
一度お試し頂き、もしうまくいかなかった場合は再度ご連絡頂ければ幸いです。
-
piglet
- 記事: 2
- 登録日時: 2007年12月13日(木) 13:46
投稿記事
by piglet » 2007年12月13日(木) 15:56
早速のご返信ありがとうございました。
ご教示頂きました方法にて解決致しました。
全てのエントリーに対してifで処理するのではなく、条件に合った
エントリーのみを処理すると言うことですね!
どうもありがとうございました。