我有以下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('"', $url, '",')" />
</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>
答案 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('"', ., '"')" />
</xsl:template>
</xsl:stylesheet>
应用于此XML文档(没有提供!):
<url-picker>
<url>1</url>
<url>2</url>
<url>3</url>
</url-picker>
产生了想要的正确结果:
"1","2","3"
请注意:
您不需要变量$url
。
如果您需要此类变量,请勿创建子节点(这会导致RTF)。始终使用select
的{{1}}属性:
而不是:
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('"', $url, '"')" />
<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('"', $url, '"')" />
<xsl:if test="following-sibling::url-picker">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>