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>