我有以下代码段
<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,
编辑:
我发现了这个问题。我使用<xsl:apply-templates>
来选择一组数据,然后在每本书的另一个模板中,我正在进行位置检查。但是,last()
指的是原始数据集,而不是过滤后的子集。
答案 0 :(得分:0)
什么是“test()”?我想你想要“last() - 1”。
答案 1 :(得分:0)
以下在Firefox中对我来说没问题(如果 n n -1逗号为 n 书籍>&0)。我怀疑你的XSLT处理器坏了。
XSLT(“x.xsl”):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="iso-8859-1" media-type="text/xhtml" doctype-public="-//W3C//DTD HTML 4.0//EN"/>
<xsl:template match="/">
<xsl:for-each select="root/book">
<xsl:value-of select="title"/><xsl:if test="position() != last()">;</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="x.xsl" type="text/xsl"?>
<root>
<book>
<title>A</title>
</book>
<book>
<title>B</title>
</book>
</root>