xsl-list
[Top] [All Lists]

Re: auto-replacing text with hyperlink

2003-08-14 03:23:02
Unfortunately it doesn't. When I used exactly the same template with the XML
document I have, it changed every instance of the word into a hyperlink. I
had hoped it would only do it once as well, since it doesn't call the
template again, but alas, it still changes every instance of the word. I
thought it might have something to do with the the match="text()" part, but
I didn't know any other way to get it to pull the word out of the text
without it being in an element of it's own.

----- Original Message ----- 
From: "Cina Zone" <zfyzhangji(_at_)163(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Thursday, August 14, 2003 4:22 AM
Subject: Re: [xsl] auto-replacing text with hyperlink


i think it would only turn the first instance,just as you wished



I'd like to have the XSLT automatically turn certain words into a link (a
glossary definition), but I'm having some problems doing this. I've
managed
to find a search-and-replace template on the net and I've tailored it to
turn the specified word into a link. It seems to be working so far,
although
I'm not sure if this is best way to do it. However, I'd like to have it
turn
only the *first* instance of the word into a link instead of every
instance
on the page. Any suggestions of how I can do this?

(I'd love to buy an XSLT book for reference, but I'm afraid my student
budget doesn't let me afford it, thus, I ask here.)

Here's what I have so far:

----------
<xsl:variable name="term" as="xs:string">stratigraphy</xsl:variable>

<xsl:template match="text()">
 <xsl:call-template name="definition">
 <xsl:with-param name="text" select="."/>
 <xsl:with-param name="from" select="$term"/>
 <xsl:with-param name="to">
 <![CDATA[<a href="glossary.asp?term=]]><xsl:value-of
select="$term"/><![CDATA[">]]><xsl:value-of
select="$term"/><![CDATA[</a>]]>
 </xsl:with-param>
 </xsl:call-template>
</xsl:template>

<xsl:template name="definition">
    <xsl:param name="text"/>
    <xsl:param name="from"/>
    <xsl:param name="to"/>
    <xsl:choose>
 <xsl:when test="contains($text, $from)">
 <xsl:variable name="before" select="substring-before($text, $from)"/>
 <xsl:variable name="after" select="substring-after($text, $from)"/>
 <xsl:value-of select="$before"/>
 <xsl:value-of select="$to" disable-output-escaping="yes"/>
<xsl:value-of select="$after"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
</xsl:template>

---------

Thanks for the help!
Noelle




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



<Prev in Thread] Current Thread [Next in Thread>