xslt - 从最后一个元素中删除逗号

时间:2011-07-06 16:20:08

标签: xslt umbraco

我有以下XSLT宏(在Umbraco中)

<xsl:param name="currentPage"/>
<xsl:template match="/">
  <xsl:apply-templates select="$currentPage/imageList/multi-url-picker" />
</xsl:template>
      <xsl:template match="url-picker">
        <xsl:variable name="url"><xsl:value-of select="./url" /></xsl:variable>
        <xsl:value-of select="concat('&quot;', $url, '&quot;,')" />
    </xsl:template>

我不想将逗号添加到集合中的最后一个url-picker。 我该怎么做呢?

编辑:XML架构,仅供参考:

<multi-url-picker>
<url-picker mode="URL">
    <new-window>True</new-window>
    <node-id />
    <url>http://our.umbraco.org</url>
    <link-title />
</url-picker>
<url-picker mode="Content">
    <new-window>False</new-window>
    <node-id>1047</node-id>
    <url>/homeorawaytest2.aspx</url>
    <link-title />
</url-picker>
<url-picker mode="Media">
    <new-window>False</new-window>
    <node-id>1082</node-id>
    <url>/media/179/bolero.mid</url>
    <link-title>Listen to this!</link-title>
</url-picker>
<url-picker mode="Upload">
    <new-window>False</new-window>
    <node-id />
    <url>/media/273/slide_temp.jpg</url>
    <link-title />
</url-picker>

3 个答案:

答案 0 :(得分:6)

使用

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>    

    <xsl:template match="url">
        <xsl:if test="not(position()=1)">
            <xsl:text>,</xsl:text>
        </xsl:if>
        <xsl:value-of select="concat('&quot;', ., '&quot;')" />
    </xsl:template>
</xsl:stylesheet>

应用于此XML文档(没有提供!):

<url-picker>
  <url>1</url>
  <url>2</url>
  <url>3</url>
</url-picker>

产生了想要的正确结果

"1","2","3"

请注意

  1. 您不需要变量$url

  2. 如果您需要此类变量,请勿创建子节点(这会导致RTF)。始终使用select的{​​{1}}属性:

  3. 而不是

    xsl:variable

    <强>写

    <xsl:variable name="url"><xsl:value-of select="./url" /></xsl:variable>
    

    0.3。对变量使用某些命名约定是一个好习惯,因此如果意外跳过<xsl:variable name="url" select="url" /> ,名称将不会轻易与现有元素的名称相同。例如使用:

    $

答案 1 :(得分:2)

我不确定它是否适用于您的情况,因为我不确定调用url-picker模板的当前上下文,但您可以添加xsl:if ...

<xsl:template match="url-picker">
  <xsl:variable name="url"><xsl:value-of select="./url" /></xsl:variable>
  <xsl:value-of select="concat('&quot;', $url, '&quot;')" />
  <xsl:if test="not(position()=last())">
    <xsl:text>,</xsl:text>
  </xsl:if>
</xsl:template>

答案 2 :(得分:2)

你也可以检查下一个兄弟姐妹:

  <xsl:template match="url-picker">
    <xsl:variable name="url"><xsl:value-of select="./url" /></xsl:variable>
    <xsl:value-of select="concat('&quot;', $url, '&quot;')" />
     <xsl:if test="following-sibling::url-picker">
      <xsl:text>,</xsl:text>
    </xsl:if>
  </xsl:template>