it-swarm-ja.tech

XSL for-each:最後のノードを検出する方法は?

私はこの簡単なコードを持っています:

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

追加するアイテムごとにコンマを追加しようとしています。

これには2つの欠陥があります。

  1. アイテムが1つしかない場合:コードは無条件にコンマを追加します。
  2. 複数のアイテムがある場合:最後のアイテムにはカンマが付きます。

これを解決する最もエレガントなソリューションは何だと思いますか?

XSLT 2.0を使用しています

47
sivabudh

XSLT 2.0を使用している場合、問題に対する正解は次のとおりです。

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

XSLT 1.0では、ノードセット内の最後の要素を見つけるためのCPUにやや高価なアプローチは次のとおりです。

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

最終回答:

<xsl:for-each select="GroupsServed">
  <xsl:value-of select="."/>                                    
  <xsl:choose>
    <xsl:when test="position() != last()">,<br/></xsl:when>
  </xsl:choose>
</xsl:for-each>
28
sivabudh
<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>
2
Grigory K