- PR -

position()の数値について

1
投稿者投稿内容
ane
会議室デビュー日: 2006/02/24
投稿数: 6
投稿日時: 2006-02-24 12:58
最近XMLを触り始めました。おかしなことを尋ねていたらすみません。

XMLをXSLTでXHTMLに変換しようとしています。
XMLの内容は以下のような単純なものです。
コード:
<data>
<case>ケース1</case>
<case>ケース2</case>
<case>ケース3</case>
<case>ケース4</case>
<case>ケース5</case>
</data>


最終的には、これを3行2列のテーブルにしたいのですが、うまくいきませんでした。
そこで原因を突き詰めていくうちにposition()の値がおかしいことに気づきました。
コード:
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="case">
<xsl:value-of select="position()"/>
</xsl:template>


このようにしてposition()を表示させると、「2468」と出るのです。
<case>は5個しかありません。
position()は何を数えているのですか?
未記入
常連さん
会議室デビュー日: 2005/07/04
投稿数: 31
投稿日時: 2006-02-24 14:50
空白(改行)がテキストノード。
ane
会議室デビュー日: 2006/02/24
投稿数: 6
投稿日時: 2006-02-25 20:34
あ、そういうことでしたか!
わかりました。
ありがとうございます。
ane
会議室デビュー日: 2006/02/24
投稿数: 6
投稿日時: 2006-03-01 16:06
またつまずいてしまいました。

前述のデータを2行2列のテーブルにしようとしています。
ケース1 ケース2
ケース3 ケース4
のように横に2つづつ並べたいと思います。

コード:

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="data" />
</body>
</html>
</xsl:template>

<xsl:template match="data">
<table border="1">
<xsl:for-each select="case">
<tr>
<td>
<xsl:if test="position() mod 2 = 1">
<xsl:value-of select="."/>
</xsl:if>
</td>
<td>
<xsl:if test="position() mod 2 = 0">
<xsl:value-of select="."/>
</xsl:if>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>



これだと、市松模様のように互い違いに入ってしまいます。
うまくケース1とケース2を並べるにはどうしたらいいのでしょうか。

[ メッセージ編集済み 編集者: ane 編集日時 2006-03-01 16:07 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-03-01 17:57
テーマが違うので、新しいスレッドを起こす(立てる)べき。
ane
会議室デビュー日: 2006/02/24
投稿数: 6
投稿日時: 2006-03-01 18:27
>MMXさま
ご指摘ありがとうございます。
新しく立てました。
1

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