XSL для каждого: как определить последний node?

У меня есть этот простой код:

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

Я пытаюсь добавить запятую для каждого добавленного элемента.

У этого есть 2 недостатка:

  • Случай, когда есть только 1 элемент: код безоговорочно добавит запятую.
  • Случай с более чем 1 пунктом: последний элемент имел бы запятую.

Как вы думаете, это самое элегантное решение для решения этой проблемы?

Я использую XSLT 2.0

Ответ 1

Если вы используете XSLT 2.0, канонический ответ на вашу проблему -

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

В XSLT 1.0 несколько дорогостоящий подход к поиску последнего элемента в node -set - это

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

Ответ 2

Окончательный ответ:

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

Ответ 3

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