You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT中使用substring-after获取最后一个分隔符后的内容

XSLT提取最后一个分隔符后内容的实现方法

以下以分隔符-、待处理字符串N1-N2-N3、目标结果N3为例给出方案:

适配XSLT 1.0版本(基于substring-after递归实现)

XSLT 1.0没有内置的字符串拆分函数,直接通过递归调用substring-after反复截取剩余内容,直到不存在分隔符即可得到最后一段内容:

<!-- 定义递归提取模板 -->
<xsl:template name="getLastSegment">
  <xsl:param name="inputStr" />
  <xsl:param name="delimiter" />
  <xsl:choose>
    <xsl:when test="contains($inputStr, $delimiter)">
      <xsl:call-template name="getLastSegment">
        <xsl:with-param name="inputStr" select="substring-after($inputStr, $delimiter)" />
        <xsl:with-param name="delimiter" select="$delimiter" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$inputStr" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<!-- 调用示例 -->
<xsl:call-template name="getLastSegment">
  <xsl:with-param name="inputStr" select="'N1-N2-N3'" />
  <xsl:with-param name="delimiter" select="'-'" />
</xsl:call-template>

该方案兼容边界场景:如果输入字符串不包含分隔符,会直接返回原字符串。

适配XSLT 2.0及以上版本

如果不限制必须用substring-after,可以直接用更简洁的tokenize函数实现:

<xsl:value-of select="tokenize('N1-N2-N3', '-')[last()]" />

如果要求必须基于substring-after实现,可以按以下逻辑编写:

<xsl:value-of select="
  if (contains('N1-N2-N3', '-')) 
  then substring-after('N1-N2-N3', string-join(tokenize('N1-N2-N3', '-')[position() ne last()], '-')) 
  else 'N1-N2-N3'
" />

内容的提问来源于stack exchange,提问作者MOz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:05