XSL for-each:如何检测最后一个节点?

我有这个简单的代码:

<xsl:for-each select="GroupsServed"> <xsl:value-of select="."/>,<br/> </xsl:for-each></font> 

我试图为每个添加的项目添加一个逗号。

这有两个缺陷:

  1. 如果只有一个项目:代码将无条件添加一个逗号。
  2. 大于1个项目的情况:最后一个项目会有一个逗号。

你认为最好的解决scheme是什么?

我正在使用XSLT 2.0

如果您使用的是XSLT 2.0,那么您的问题的标准答案是

 <xsl:value-of select="GroupsServed" separator=", " /> 

在XSLT 1.0中,查找节点集中最后一个元素的CPU花费有点高

 <xsl:if test="position() = last()" /> 

最终答案:

 <xsl:for-each select="GroupsServed"> <xsl:value-of select="."/> <xsl:choose> <xsl:when test="position() != last()">,<br/></xsl:when> </xsl:choose> </xsl:for-each> 
 <xsl:variable name="GROUPS_SERVED_COUNT" select="count(GroupsServed)"/> <xsl:for-each select="GroupsServed"> <xsl:value-of select="."/> <xsl:if test="position() < $GROUPS_SERVED_COUNT"> ,<br/> </xsl:if> </xsl:for-each></font>