In XSLT 1.0 you will need to use a recursive template, like this:
<xsl:template name="substring-after-last">
<xsl:param name="string" />
<xsl:param name="delimiter" />
<xsl:choose>
<xsl:when test="contains($string, $delimiter)">
<xsl:call-template name="substring-after-last">
<xsl:with-param name="string"
select="substring-after($string, $delimiter)" />
<xsl:with-param name="delimiter" select="$delimiter" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise><xsl:value-of
select="$string" /></xsl:otherwise>
</xsl:choose>
</xsl:template>
and invoke it like this:
<xsl:call-template name="substring-after-last">
<xsl:with-param name="string" select="'M:Namespace.Class.Method(Something a, Something b)'" />
<xsl:with-param name="delimiter" select="'.'" />
</xsl:call-template>
In XSLT 2.0, you can use the tokenize() function and simply select the last item in the sequence:
tokenize('M:Namespace.Class.Method(Something a, Something b)','.')[last()]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…