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

siv*_*udh 47 xslt

我有这个简单的代码:

<xsl:for-each select="GroupsServed">
  <xsl:value-of select="."/>,<br/>
</xsl:for-each></font>
Run Code Online (Sandbox Code Playgroud)

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

这有两个缺陷:

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

您认为解决此问题的最优雅解决方案是什么?

我正在使用XSLT 2.0

Sto*_*bor 80

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

<xsl:value-of select="GroupsServed" separator=", " />
Run Code Online (Sandbox Code Playgroud)

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

<xsl:if test="position() = last()" />
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的XSLT 1.0方法。在我的2.0上效果很好 (2认同)
  • 无法让这个语法工作,如果有机会你可以帮忙解决这个问题...... /sf/ask/4340413871/ (2认同)

siv*_*udh 29

最终答案:

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