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

时间:2009-11-15 21:05:23

标签: xslt

我有这个简单的代码:

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

我正在尝试为添加的每个项添加逗号。

这有两个缺陷:

  1. 当只有一项时的情况:代码将无条件地添加逗号。
  2. 当有超过1个项目的情况时:最后一个项目会有逗号。
  3. 您认为解决此问题的最佳解决方案是什么?

    我正在使用XSLT 2.0

3 个答案:

答案 0 :(得分:79)

如果您使用的是XSLT 2.0,那么您的问题的典型答案就是

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

在XSLT 1.0上,查找节点集中最后一个元素的CPU有点昂贵的方法是

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

答案 1 :(得分:27)

最终答案:

<xsl:for-each select="GroupsServed">
  <xsl:value-of select="."/>                                    
  <xsl:choose>
    <xsl:when test="position() != last()">,<br/></xsl:when>
  </xsl:choose>
</xsl:for-each>

答案 2 :(得分:2)

<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>