如何使用xsl:for-each呈现逗号分隔的列表

时间:2009-12-22 17:18:27

标签: xslt

我通过xslt渲染一个代码清单到html,我希望列表是逗号取消。假设我打算使用xsl:for-each ......

<xsl:for-each select="/Tickers/Ticker">
    <xsl:value-of select="TickerSymbol"/>,
</xsl:for-each>

摆脱尾随逗号的最佳方法是什么?有没有比xsl更好的东西:for-each?

4 个答案:

答案 0 :(得分:17)

<xsl:for-each select="/Tickers/Ticker">
    <xsl:if test="position() > 1">, </xsl:if>
    <xsl:value-of select="TickerSymbol"/>
</xsl:for-each>

答案 1 :(得分:6)

XSLT 2.0 中,您可以使用string-join function执行此操作(没有for-each ):

<xsl:value-of  select="string-join(/Tickers/Ticker, ',')"/>  

答案 2 :(得分:2)

在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()&gt;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>

答案 3 :(得分:1)

我知道你说xsl 2.0不是一个选项,问题问题已经有很长一段时间了,但是对于那些寻找可行性去做你想要达到的目标的人来说:

在xsl 2.0或更高版本中有一种更简单的方法

<xsl:value-of separator=", " select="/Tickers/Ticker/TickerSymbol" />

这将读取您的/ Tickers / Ticker元素,并在需要时插入','作为分隔符

如果有更简单的方法可以做到这一点,我期待着提出建议

问候凯文