- - PR -
XSLTで連番表示する方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-03-25 13:52
<list num="3" />
に対して <td>a</td> <td>b</td> <td>c</td> というのを出力したくて <xsl:template name="List"> <xsl:param name="No" select="1" /> <td> a </td> <xsl:if test="$No > @num"> <xsl:call-template name="List"> <xsl;with-param name="No" select="$No + 1" /> </xsl:call-template> </xsl:if> </xsl:template> でaのところでa,b,c,d...と切り替えていきたいのですが、 <xsl:number>を使ってみたりしたのですが、うまくカウントできなくて困っています。 どうしたらいいでしょうか? |
|
投稿日時: 2004-03-25 14:01
杉本です。こんにちわ。
<xsl;with-param name="No" select="$No + 1" /> の部分が、コロンじゃなくセミコロンになってますが・・ あと、 <xsl:param name="No" select="1" /> ですが、 <xsl:param name="No" /> としてみてください。 初期値は、 <xsl:template name="List"> このテンプレートを自身以外から呼ぶときに、 与えてあげれば良いのではないでしょうか? |
|
投稿日時: 2004-03-25 14:14
><xsl;with-param name="No" select="$No + 1" />
>の部分が、コロンじゃなくセミコロンになってますが・・ コピーペーストせずに書いていたので間違えたみたいです。 >初期値は、 ><xsl:template name="List"> >このテンプレートを自身以外から呼ぶときに、 >与えてあげれば良いのではないでしょうか? 初期値は常に1なので呼び出すたびに書くよりは良いかなとおもいましたので… やりたいことは 1をaに 2をa,bに 3をa,b,cに… というような連番に変換することです。 数字を数字の連番にするのは楽なのですが、 私が知らないだけかもしれませんが、プログラミング言語のように a+1がbになったりしてくれないようなので、どうにかうまい方法は無いかと探しているのですが |
|
投稿日時: 2004-03-25 14:34
ほむらです。
文字数が決まっているのならばグローバルにデータ("abcdefg"など)を準備しておいて substring(?)で文字を必要な分だけ抜き出してみるとかどうですか? #やろうとしていることがホントにXSLTでやるべきことなのかなんて疑問もありますが。。 |
|
投稿日時: 2004-03-25 15:09
>文字数が決まっているのならばグローバルにデータ("abcdefg"など)を準備しておいて
>substring(?)で文字を必要な分だけ抜き出してみるとかどうですか? ありがとうございます、一応解決しました。 >#やろうとしていることがホントにXSLTでやるべきことなのかなんて疑問もありますが。。 もっともな意見だと思いますが、xml作る段階でそのように決めてしまったため、xmlを直すよりはxsltで実装したほうが楽だと思い方法を模索していました。 |
|
投稿日時: 2004-03-25 17:36
paihuさま、こんにちは。
以下のような感じでしょうか。 【sample1.xml】 <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="sample1.xsl"?> <list num="3" /> 【sample1.xsl】 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> <xsl:template match="/"> <html> <head><title>sample1</title></head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="list"> <table border="1"> <tr> <xsl:call-template name="List"> <xsl:with-param name="No" select="1" /> </xsl:call-template> </tr> </table> </xsl:template> <xsl:template name="List"> <xsl:param name="No" /> <td><xsl:number value="$No" format="a" /></td> <xsl:if test="$No < @num"> <xsl:call-template name="List"> <xsl:with-param name="No" select="$No + 1" /> </xsl:call-template> </xsl:if> </xsl:template> </xsl:stylesheet> |
|
投稿日時: 2004-03-25 17:43
上記コードですが
<xsl:if test="$No < @num"> の一部が化けてしまいました。すみません。 <の部分は&lt;でして、 <xsl:if test="$No &lt; @num"> になります。 (このボードの特徴に詳しくないため、いわゆる全角文字を使うことをお許しください) |
|
投稿日時: 2004-03-28 17:02
なるほど、そういう方法がありましたか…
勉強になります。 xsl:numberでvalueが使えることは知りませんでした。 情報ありがとうございます。 [ メッセージ編集済み 編集者: paihu 編集日時 2004-03-28 17:08 ] |
1