使用XSL修剪URL

时间:2009-09-29 14:33:17

标签: xslt

我在网页上有一些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中做到这一点?

1 个答案:

答案 0 :(得分:1)

递归的逐步字符串处理:

<xsl:template name="trim-url">
  <xsl:param name="url" select="''" />
  <xsl:param name="lvl" select="0" />

  <xsl:if test="$lvl &gt; 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'