Я представляю список тикеров к HTML через xslt, и я хотел бы за список быть разграниченной запятой. Принятие я собирался использовать xsl:for-каждого...
<xsl:for-each select="/Tickers/Ticker">
<xsl:value-of select="TickerSymbol"/>,
</xsl:for-each>
Что лучший способ состоит в том, чтобы избавиться от запаздывающей запятой? Есть ли что-то лучше, чем xsl:for-каждый?
<xsl:for-each select="/Tickers/Ticker">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="TickerSymbol"/>
</xsl:for-each>
В XSLT 1.0, другой альтернативой использованию xsl:for-each было бы использование xsl:apply-templates
<xsl:template match="/">
<!-- Output first element without a preceding comma -->
<xsl:apply-templates select="/Tickers/Ticker[position()=1]" />
<!-- Output subsequent elements with a preceding comma -->
<xsl:apply-templates select="/Tickers/Ticker[position()>1]">
<xsl:with-param name="separator">,</xsl:with-param>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Ticker">
<xsl:param name="separator" />
<xsl:value-of select="$separator" /><xsl:value-of select="TickerSymbol" />
</xsl:template>
В XSLT 2. 0 можно было сделать ( без for-each), используя функцию , соединяющую строки :
<xsl:value-of select="string-join(/Tickers/Ticker, ',')"/>