Here is a template that can be used to count the number of substrings within a particular string. It takes two parameters.
string
: which is the large string we are search throughsubstr
: which is the substring we are searching for
<xsl:template name="substring-count">
<xsl:param name="string"/>
<xsl:param name="substr"/>
<xsl:choose>
<xsl:when test="contains($string, $substr) and $string and $substr">
<xsl:variable name="rest">
<xsl:call-template name="substring-count">
<xsl:with-param name="string" select="substring-after($string, $substr)"/>
<xsl:with-param name="substr" select="$substr"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$rest + 1"/>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:template>
To use this template, use the call-template
element:
<xsl:call-template name="substring-count">
<xsl:with-param name="string" select="'mary had a little lamb'" />
<xsl:with-param name="substr" select="'lamb'" />
</xsl:call-templat>