我在网页上有一些XSL,网址为:
site.domain.com/dir/dir/dir/dir
同样的XSL也出现在URL为:
的页面上site.domain.com/dir/dir/dir
我需要这两页的链接指向:
site.domain.com/dir/dir/site
因此,在这两个页面上,我需要获取:site.domain.com/dir/dir
作为HREF属性的一部分。
有谁能想到我会如何在XSL中做到这一点?
答案 0 :(得分:1)
递归的逐步字符串处理:
<xsl:template name="trim-url">
<xsl:param name="url" select="''" />
<xsl:param name="lvl" select="0" />
<xsl:if test="$lvl > 0">
<xsl:variable name="tmp" select="concat($url, '/')" />
<xsl:value-of select="substring-before($tmp, '/')" />
<xsl:value-of select="'/'" />
<xsl:call-template name="trim-url">
<xsl:with-param name="url" select="substring-after($tmp, '/')" />
<xsl:with-param name="lvl" select="$lvl - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
调用如下:
<xsl:variable name="trimmed-url">
<xsl:call-template name="trim-url">
<xsl:with-param name="url" select="$url" />
<xsl:with-param name="lvl" select="3" />
</xsl:call-template>
<xsl:value-of select="'site'" />
</xsl:variable>
当$url
为'site.domain.com/dir/dir/dir/dir'
时,$trimmed-url
将为'site.domain.com/dir/dir/site'
。