Subject: RE: Highlighting words/phrases
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 27 Jul 2006 22:54:21 +0100
|
If you change your code so that it makes a recursive call on "highlight" in
place of the call on "search-and-replace" (whose function is unclear from
your description), then it will highlight all the occurrences.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: yguaba@xxxxxxxxxxxx [mailto:yguaba@xxxxxxxxxxxx]
> Sent: 27 July 2006 22:27
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Highlighting words/phrases
>
> Dear all,
>
> I am using XSLT to output search results. The source XML
> files can be very roughly exemplified thus:
>
> <root>
> <keywords>
> <keyword>term</keyword>
> <keyword>another search term</keyword>
> </keywords>
> <document number="x">
> <contents>sample text</contents>
> </document>
> <document number="y">
> <contents>another sample</contents>
> </document>
> </root>
>
> Basically, I want to be able to "highlight" the key words and
> phrases ("keyword" elements) by enclosing each of them
> within, say, a "span"
> tag with a certain "class" attribute (in order to style these
> bits via CSS).
>
> My first idea was to use some kind of a search/replace routine, like
> so:
>
> <xsl:template name="highlight">
> <xsl:param name="input"/>
> <xsl:param name="search-string"/>
> <!-- CSS class -->
> <xsl:param name="class-name"/>
> <xsl:choose>
> <xsl:when test="$search-string and
> contains($input, $search- string)">
> <xsl:value-of
> select="substring-before($input, $search-string)"/>
> <span class="{$class-name}">
> <xsl:value-of
> select="$search-string"/>
> </span>
> <xsl:call-template
> name="search-and-replace">
> <xsl:with-param
> name="input" select="substring-after($input, $search-string)"/>
> <xsl:with-param
> name="search-string" select="$search-string"/>
> <xsl:with-param
> name="class-name" select="$class-name"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="$input"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> The problem is that this would only highlight the first key
> word or phrase. But I would need to iterate through all the
> key words using xsl:for-each and highlight them all, which
> would of course not work with the above template.
>
> Any suggestions or links to possible solutions would be appreciated.
>
> Cheers,
>
> Erik
>
>
> _______________________________________________________
> Novidade no Yahoo! Mail: receba alertas de novas mensagens no
> seu celular. Registre seu aparelho agora!
> http://br.mobile.yahoo.com/mailalertas/
|