我有以下片段
<xsl:for-each select="book">
<xsl:value-of select="title"/><xsl:if test="position() != last()">,</xsl:if>
</xsl:for-each>
我希望它是一个以逗号分隔的书名列表。
当列表中没有书时,输出是正确的。当我有不止一本书时,这也是正确的。
但是,如果我只有一本书,它会在最后打印一个逗号。
当我将条件更改为仅在最后一个元素时打印逗号时,只有一本书的情况不会打印逗号。
因此,当只有一个元素时,它似乎不会被视为最后一个元素。我该如何处理?
示例 XML:看起来像这样
<booklist>
<book>
<title>My book</title>
<author>Some author</author>
</book>
<book>
<title>Another book</title>
<author>Another author</author>
</book>
</booklist>
当列表中有两本书时,我得到
My book, Another book
当我删除第二个条目时,我得到
My book,
编辑:
我发现了这个问题。我使用 an<xsl:apply-templates>
来选择一组数据,然后在每本书的另一个模板中进行位置检查。但是,last()
指的是原始数据集,而不是过滤后的子集。