2009-09-29 8 views
0

J'ai quelques XSL sur une page avec une URL:URL Recadrage avec XSL

 
site.domain.com/dir/dir/dir/dir 

Le même XSL apparaît également sur une page avec l'URL de:

 
site.domain.com/dir/dir/dir 

J'ai besoin des liens de ces deux pages pour pointer vers:

 
site.domain.com/dir/dir/site 

donc sur les deux pages que je dois faire: site.domain.com/dir/dir dans le cadre de l'attribut HREF. Est-ce que quelqu'un peut penser comment je pourrais le faire en XSL?

+0

Parlez-vous de l'attribut pseudo 'href' dans les instructions de traitement (PI)? Est-ce que vous posez des questions sur l'URI du document de style? Ensuite, lancer '/' dans un URI relatif signifie "domaines root", donc '/ dir/dir' sera résolu en' domain.com/dir/dir' depuis n'importe quel sous-dossier. –

Répondre

1

traitement de chaîne étape par étape par récursion:

<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> 

appelé comme suit:

<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> 

Lorsque $url est 'site.domain.com/dir/dir/dir/dir', alors $trimmed-url seront 'site.domain.com/dir/dir/site'.