De replace-functie van exslt werkt ook gewoon met een template (zie
str.replace.zip en dan str.replace.function.xsl), maar heeft daar bijna 100 regels voor nodig
Bovenstaande code kan gemakkelijk uitgebreid worden naar een generieke replace-functie:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <xsl:template name="replace">
<xsl:param name="string"/>
<xsl:param name="search"/>
<xsl:param name="replace"/>
<xsl:variable name="before" select="substring-before($string, $search)"/>
<xsl:variable name="after" select="substring-after($string, $search)"/>
<xsl:choose>
<xsl:when test="$before">
<!-- $before is niet leeg dus $search zit in $string -->
<xsl:value-of select="concat($before, $replace)"/>
<xsl:call-template name="replace">
<xsl:with-param name="string" select="$after"/>
<xsl:with-param name="search" select="$search"/>
<xsl:with-param name="replace" select="$replace"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template> |
Met slechts 21 regels code

(Maar misschien is dat exslt geval efficienter?)
[
Voor 0% gewijzigd door
marcusk op 03-10-2002 14:38
. Reden: oeps, beetje scheel getelt ]