我在XML文件中有一个字符串,看起来类似于:
M:Namespace.Class.Method(Something a,something b)
句点(.)字符的数量是有用的,这意味着它可以只有2,如本例所示,但可以更多.
我想使用XSLT从最后一个'.'获取此字符串的子字符串.性格,所以我只剩下:
方法(某事,某事b)
我无法使用标准的substring/substring-after函数实现此目的.
是否有捷径可寻?
Mad*_*sen 22
在XSLT 1.0中,您将需要使用递归模板,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
并像这样调用它:
<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>
Run Code Online (Sandbox Code Playgroud)
在XSLT 2.0中,您可以使用tokenize()函数,只需选择序列中的最后一项:
tokenize('M:Namespace.Class.Method(Something a, Something b)','\.')[last()]
Run Code Online (Sandbox Code Playgroud)