Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

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>