RE: [xsl] Identifing link (advanced)

Subject: RE: [xsl] Identifing link (advanced)
From: Americo Albuquerque <aalbuquerque@xxxxxxxxxxxxxxxx>
Date: Fri, 7 Jun 2002 19:49:12 +0100
Yes, I got your point. It will work if the first is a http:// if is not it
breaks the links before the http://


-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Joerg
Heinicke
Sent: Friday, June 07, 2002 7:18 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Identifing link (advanced)


Your code does not work. It does the same as the original post (after a
short look on you code). You don't know whether "http://"; or "file:/"
comes first in the text.

Joerg

Americo Albuquerque wrote:
>
> Sorry, have to change the <A> tag to work as you want :)
>
>  <xsl:template match="text">
>   <xsl:call-template name="add-link">
>    <xsl:with-param name="string" select="."/>
>   </xsl:call-template>
>   <br/><br/>
>  </xsl:template>
>
>  <xsl:template name="add-link">
>   <xsl:param name="string"/>
>   <xsl:param name="link">
>    <xsl:choose>
>     <xsl:when test="contains($string, 'http://')">http://</xsl:when>
>     <xsl:when test="contains($string, 'file://')">file:/</xsl:when>   <!--
> Doesn't need the file:/// because this one do both -->
>     <xsl:when test="contains($string, 'ftp://')">ftp://</xsl:when>    <!--
> yes, it recognise ftp:// also, any other just join  another when
clause -->
>     <xsl:otherwise>
>      <xsl:value-of select="false()"/>
>     </xsl:otherwise>
>    </xsl:choose>
>   </xsl:param>
>   <xsl:choose>
>    <xsl:when test="contains($string, $link)">
>     <xsl:value-of select="substring-before($string, $link)"/>
>     <a href="{$link}{substring-before(substring-after($string, $link), '
> ')}">    <!---- here I had to substitut 'http://' for {$link} -->
>     <xsl:value-of select="$link"/>    <!-- this puts the correct string in
> the output -->
>     <xsl:value-of select="substring-before(substring-after($string,
$link),
> ' ')"/>
>     </a>
>     <xsl:text> </xsl:text>
>     <xsl:call-template name="add-link">
>      <xsl:with-param name="string"
> select="substring-after(substring-after($string, $link), ' ')"/>
>     </xsl:call-template>
>    </xsl:when>
>    <xsl:otherwise>
>     <xsl:value-of select="$string"/>
>    </xsl:otherwise>
>   </xsl:choose>
>  </xsl:template>
>
>
>
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Raimund
> Kammering
> Sent: Friday, June 07, 2002 6:01 PM
> To: XSL-List
> Subject: [xsl] Identifing link (advanced)
>
>
> Hi,
>
> first of all I would like to thank Charles (you are completly right -
> but since I needed some XSLT solution I was satisfied with Joerg's
> solution), Joerg (great since I exactly needed this recursion) and
> Andrew (that is amazing compact from)!
> My own guess was nearly the same as Joerg posted - BUT I missed the idea
> of the recursive call.
>
> So anyway this worked pretty well and I was going to do some minor
> modifications (at least I thought so) and run into
> some big trouble (again).
> What I wanted to do is to also identify the 'file:/' and 'file:///'
> URL's. This sounds like an easy choose ... clause - but when
> I went into the detail I got again stuck.
> The problem is that a simple contains($string, 'file:/') will match even
> if there are some 'http:/' strings and now one has to take care of the
> ordering of these strings. The situation is getting more complicated (at
> least for my) by the fact, that the choose is exiting after the first
> match. So the simplest model like:
>
>     <xsl:param name="link">
>       <xsl:choose>
>         <xsl:when test="contains($string, 'http://')">
>           <xsl:value-of select="'http://'"/>
>         </xsl:when>
>         <xsl:when test="contains($string, 'file:/')">
>           <xsl:value-of select="'file:/'"/>
>         </xsl:when>
>         <xsl:when test="contains($string, 'file:///')">
>           <xsl:value-of select="'file:///'"/>
>         </xsl:when>
>         <xsl:otherwise>
>           <xsl:value-of select="false()"/>
>         </xsl:otherwise>
>       </xsl:choose>
>     </xsl:param>
>
> will in case that all three strings are present always give
> link='http://' (if the choose is build this way).
> So in principle it is clear for me what has to be done (at least
> nearly). But I am having a hard time to get this really implemented
> (building kind of hash list or ...).
> Here is the code snipplet I got set up till now (that is not finding all
> strings):
>
>   <xsl:template name="add-link">
>     <xsl:param name="string"/>
>     <xsl:param name="link">
>       <xsl:choose>
>         <xsl:when test="contains($string, 'http://')">
>           <xsl:value-of select="'http://'"/>
>         </xsl:when>
>         <xsl:when test="contains($string, 'file:/')">
>           <xsl:value-of select="'file:/'"/>
>           <xsl:value-of select="position()"/>
>         </xsl:when>
>         <xsl:when test="contains($string, 'file:///')">
>           <xsl:value-of select="'file:///'"/>
>         </xsl:when>
>         <xsl:otherwise>
>           <xsl:value-of select="false()"/>
>         </xsl:otherwise>
>       </xsl:choose>
>     </xsl:param>
>     <xsl:choose>
>       <xsl:when test="$link!='false'">
>         <xsl:value-of select="substring-before($string, $link)"/>
>         <a href="{$link}{substring-before(substring-after($string,
> $link), ' ')}">
>           <xsl:value-of select="concat($link,
> substring-before(substring-after($string, $link), ' '))"/>
>         </a>
>         <xsl:text> </xsl:text>
>         <xsl:call-template name="add-link">
>           <xsl:with-param name="string"
> select="substring-after(substring-after($string, $link), ' ')"/>
>         </xsl:call-template>
>       </xsl:when>
>       <xsl:otherwise>
>         <xsl:value-of select="$string"/>
>       </xsl:otherwise>
>     </xsl:choose>
>   </xsl:template>
>
> So if anybody has an idea how to implement this search/ordering in a
> easy (or at least simple) way I would be happy!
>
> Raimund
>
> --
> DESY -MVP-
> Notkestrasse 85
> D-22603 Hamburg
> Tel.: +49 40 8998 -4903
> e-mail: Raimund.Kammering@xxxxxxx
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>
>
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>
>
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread