This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: replacing a string value
- From: Peter Davis <pdavis at pdavis dot cx>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 29 Nov 2001 14:06:41 -0800
- Subject: Re: [xsl] replacing a string value
- References: <MCEHJCJAMLENMMKJOCCHAEGPCCAA.ricks@isogen.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Am I right in assuming that the '?' can occur at any place in the input?:
<foo> hello ? world ? foo </foo>
would translate to:
<foo> hello <img/> world <img/> foo </foo>
This stylesheet will do what you want:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="text()" name="img-replace">
<xsl:param name="text" select="string()"/>
<xsl:choose>
<xsl:when test="not(contains($text, '?'))">
<xsl:value-of select="$text"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($text, '?')"/>
<img/>
<xsl:call-template name="img-replace">
<xsl:with-param name="text" select="substring-after($text, '?')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@* | node()[not(self::text())]">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
The second template is a modified version of the identity template, taken
from the XSLT spec. You can replace it with your normal processing if you
wish. I tested the template with the latest Xalan from their CVS, but it
should work with just about any processor since it is 100% standard.
On Thursday 29 November 2001 01:48 pm, rick schochler wrote:
> I have a requirement to replace certain string characters (if encountered)
> with a graphic. For example, if the string value of my element foo is a
> question mark (i.e, <foo>?</foo>), I need to replace the ? with a graphic.
>
> Any ideas?
--
Furthermore, I believe bacon prevents hair loss.
Peter Davis
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list