Как отобразить список через запятую с помощью xsl: for-each - PullRequest
6 голосов
/ 22 декабря 2009

Я передаю список тикеров в html через xslt, и я хотел бы, чтобы этот список был разделен запятыми. Предполагая, что я собираюсь использовать xsl: for-each ...

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

Какой самый лучший способ избавиться от запятой? Есть ли что-то лучше, чем xsl: for-each?

Ответы [ 4 ]

17 голосов
/ 22 декабря 2009
<xsl:for-each select="/Tickers/Ticker">
    <xsl:if test="position() > 1">, </xsl:if>
    <xsl:value-of select="TickerSymbol"/>
</xsl:for-each>
6 голосов
/ 23 декабря 2009

В XSLT 2.0 вы можете сделать это ( без for-each ), используя string-join функцию :

<xsl:value-of  select="string-join(/Tickers/Ticker, ',')"/>  
2 голосов
/ 23 декабря 2009

В 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>
1 голос
/ 23 июля 2017

Я знаю, что вы сказали, что xsl 2.0 не вариант, и прошло много времени с тех пор, как вопрос был задан, но для всех тех, кто ищет возможность сделать то, что вы хотели достичь:

Существует более простой способ в xsl 2.0 или выше

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

Это будет читать ваши элементы / Tickers / Ticker и вставлять ',' в качестве разделителя, где это необходимо

Если есть более простой способ сделать это, я с нетерпением жду совета

С уважением, Кевин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...