- PR -

XSLTで連番表示する方法について

1
投稿者投稿内容
paihu
会議室デビュー日: 2004/03/25
投稿数: 4
投稿日時: 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 &gt; @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>を使ってみたりしたのですが、うまくカウントできなくて困っています。
どうしたらいいでしょうか?
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 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">
このテンプレートを自身以外から呼ぶときに、
与えてあげれば良いのではないでしょうか?
paihu
会議室デビュー日: 2004/03/25
投稿数: 4
投稿日時: 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になったりしてくれないようなので、どうにかうまい方法は無いかと探しているのですが
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-03-25 14:34
ほむらです。

文字数が決まっているのならばグローバルにデータ("abcdefg"など)を準備しておいて
substring(?)で文字を必要な分だけ抜き出してみるとかどうですか?

#やろうとしていることがホントにXSLTでやるべきことなのかなんて疑問もありますが。。
paihu
会議室デビュー日: 2004/03/25
投稿数: 4
投稿日時: 2004-03-25 15:09
>文字数が決まっているのならばグローバルにデータ("abcdefg"など)を準備しておいて
>substring(?)で文字を必要な分だけ抜き出してみるとかどうですか?
ありがとうございます、一応解決しました。

>#やろうとしていることがホントにXSLTでやるべきことなのかなんて疑問もありますが。。
もっともな意見だと思いますが、xml作る段階でそのように決めてしまったため、xmlを直すよりはxsltで実装したほうが楽だと思い方法を模索していました。
TAKABE
常連さん
会議室デビュー日: 2003/05/14
投稿数: 43
投稿日時: 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>
TAKABE
常連さん
会議室デビュー日: 2003/05/14
投稿数: 43
投稿日時: 2004-03-25 17:43
上記コードですが
<xsl:if test="$No < @num">
の一部が化けてしまいました。すみません。
<の部分は&lt;でして、

<xsl:if test="$No &lt; @num">

になります。
(このボードの特徴に詳しくないため、いわゆる全角文字を使うことをお許しください)
paihu
会議室デビュー日: 2004/03/25
投稿数: 4
投稿日時: 2004-03-28 17:02
なるほど、そういう方法がありましたか…
勉強になります。
xsl:numberでvalueが使えることは知りませんでした。
情報ありがとうございます。

[ メッセージ編集済み 編集者: paihu 編集日時 2004-03-28 17:08 ]
1

スキルアップ/キャリアアップ(JOB@IT)