XSL for-each:如何检测最后一个节点?
我有这个简单的代码:
<xsl:for-each select="GroupsServed"> <xsl:value-of select="."/>,<br/> </xsl:for-each></font>
我试图为每个添加的项目添加一个逗号。
这有两个缺陷:
- 如果只有一个项目:代码将无条件添加一个逗号。
- 大于1个项目的情况:最后一个项目会有一个逗号。
你认为最好的解决scheme是什么?
我正在使用XSLT 2.0
如果您使用的是XSLT 2.0,那么您的问题的标准答案是
<xsl:value-of select="GroupsServed" separator=", " />
在XSLT 1.0中,查找节点集中最后一个元素的CPU花费有点高
<xsl:if test="position() = last()" />
最终答案:
<xsl:for-each select="GroupsServed"> <xsl:value-of select="."/> <xsl:choose> <xsl:when test="position() != last()">,<br/></xsl:when> </xsl:choose> </xsl:for-each>
<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>