Call template with parameters
File: Data.xml
<winelist>
<wine grape="Chardonnay">
<winery>shop 2</winery>
</wine>
<wine grape="Cabernet">
<winery>shop 1</winery>
</wine>
</winelist>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template name="globalReplace">
<xsl:param name="outputString" />
<xsl:param name="target" />
<xsl:param name="replacement" />
<xsl:choose>
<xsl:when test="contains($outputString,$target)">
<xsl:value-of
select="concat(substring-before($outputString,$target),$replacement)" />
<xsl:call-template name="globalReplace">
<xsl:with-param name="outputString" select="substring-after($outputString,$target)" />
<xsl:with-param name="target" select="$target" />
<xsl:with-param name="replacement" select="$replacement" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$outputString" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text()">
<xsl:call-template name="globalReplace">
<xsl:with-param name="outputString" select="." />
<xsl:with-param name="target" select="'finish'" />
<xsl:with-param name="replacement" select="'FINISH'" />
</xsl:call-template>
</xsl:template>
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Output:
<winelist>
<wine grape="Chardonnay">
<winery>shop 2</winery>
</wine>
<wine grape="Cabernet">
<winery>shop 1</winery>
</wine>
</winelist>
Related examples in the same category