Xslt 用XSL修剪URL
我在一个URL为的页面上有一些XSL: site.domain.com/dir/dir/dir/dir site.domain.com/dir/dir/dir/dir 相同的XSL也出现在URL为的页面上: site.domain.com/dir/dir/dir site.domain.com/dir/dir/dir 我需要这两个页面的链接指向: site.domain.com/dir/dir/site site.domain.com/dir/dir/site 因此,在这两个页面上,我都需要获取:Xslt 用XSL修剪URL,xslt,Xslt,我在一个URL为的页面上有一些XSL: site.domain.com/dir/dir/dir/dir site.domain.com/dir/dir/dir/dir 相同的XSL也出现在URL为的页面上: site.domain.com/dir/dir/dir site.domain.com/dir/dir/dir 我需要这两个页面的链接指向: site.domain.com/dir/dir/site site.domain.com/dir/dir/site 因此,在这两个页面上,我都需要获取
site.domain.com/dir/dir
,作为HREF属性的一部分
有人能想到我如何在XSL中做到这一点吗?通过递归逐步处理字符串:
<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'
您是在谈论处理指令(PI)中的伪href
属性吗?您是在询问样式表文档URI吗?然后,在相对URI中启动/
意味着“域根”,因此/dir/dir
将从任何子文件夹解析为domain.com/dir/dir
。