代码之家  ›  专栏  ›  技术社区  ›  MadMax1138

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

  •  6
  • MadMax1138  · 技术社区  · 15 年前

    我正在通过XSLT将代码列表呈现为HTML,我希望列表被逗号取消限制。假设我要为每个人使用xsl:

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

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

    4 回复  |  直到 8 年前
        1
  •  17
  •   Mehrdad Afshari    11 年前
    <xsl:for-each select="/Tickers/Ticker">
        <xsl:if test="position() > 1">, </xsl:if>
        <xsl:value-of select="TickerSymbol"/>
    </xsl:for-each>
    
        2
  •  6
  •   Mads Hansen    15 年前

    XSLT 2 你可以做到的( 每个都没有 )使用 string-join function :

    <xsl:value-of  select="string-join(/Tickers/Ticker, ',')"/>  
    
        3
  •  2
  •   Tim C    15 年前

    在XSLT1.0中,使用xsl:for-each的另一种替代方法是使用xsl:apply模板

    <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>
    
        4
  •  1
  •   Kevin Kussmaul    8 年前

    我知道你说过XSL 2.0不是一个选项,而且这个问题已经问了很长一段时间了,但是对于所有那些寻找一个位置来做你想做的事情的人来说:

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

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

    这将读取您的/tickers/ticker元素,并在需要时插入“,”作为分隔符。

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

    问候凯文

    推荐文章