次のスニペットがあります
<xsl:for-each select="book">
<xsl:value-of select="title"/><xsl:if test="position() != last()">,</xsl:if>
</xsl:for-each>
コンマで区切られた本のタイトルのリストにしたい。
リストに本がない場合、出力は正しいです。複数の本を持っている場合も正しいです。
ただし、本が 1 冊だけある場合は、最後にカンマが出力されます。
最後の要素の場合のみコンマを出力するように条件を変更すると、ブックが 1 つしかない場合にカンマが出力されません。
そのため、要素が1つしかない場合、最後の要素として扱われないようです。どうすればこれに対処できますか?
サンプル XML: 次のようになります。
<booklist>
<book>
<title>My book</title>
<author>Some author</author>
</book>
<book>
<title>Another book</title>
<author>Another author</author>
</book>
</booklist>
リストに2冊の本がある場合、
My book, Another book
2番目のエントリを削除すると、
My book,
編集:
問題が見つかりました。を使用し<xsl:apply-templates>
て一連のデータを選択し、各書籍の別のテンプレート内で位置チェックを行っていました。ただし、last()
フィルタリングされたサブセットではなく、元のデータ セットを参照していました。