XSL для каждого: как обнаружить последний узел? - PullRequest
47 голосов
/ 16 ноября 2009

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

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

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

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

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

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

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

Ответы [ 3 ]

80 голосов
/ 16 ноября 2009

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

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

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

<xsl:if test="position() = last()" />
28 голосов
/ 16 ноября 2009

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

<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 голосов
/ 29 марта 2017
<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...