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

XSLT中如何提取固定位置、长度可变的子字符串?

最优提取方案(XSLT)

你需要从冒号分隔的字符串里提取第3个分段QE1_300,最简洁高效的方式是用tokenize()函数结合索引定位,比循环判断更直接。

问题分析

你尝试的代码存在语法错误:myRef['[^:]*']不是正确的XPath表达式,没法实现拆分字符串的效果。要拆分冒号分隔的字符串,必须用tokenize()函数。

最优实现方式

方式1:直接通过索引获取(推荐)

在XSLT 2.0及以上版本中,tokenize()返回的是序列,直接通过下标就能定位到目标分段:

<xsl:value-of select="tokenize('xri:roughgoing:QE1_300:whatwasthis:majorleague:FC:Hungary', ':')[3]"/>

这里用[3]是因为拆分后的序列依次是:

  1. xri
  2. roughgoing
  3. QE1_300
    如果你的myRef是存储该字符串的变量或节点,替换成tokenize(myRef, ':')[3]即可。

方式2:循环遍历(不推荐,仅作对比)

如果一定要用循环,修正后的代码如下:

<xsl:for-each select="tokenize(myRef, ':')">
  <xsl:if test="position() = 3">
    <xsl:value-of select="."/>
  </xsl:if>
</xsl:for-each>

但这种写法比直接索引繁琐,没必要使用。

关于matches()的说明

matches()函数仅用于判断字符串是否匹配正则,无法直接提取子串,所以不适合用来实现你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:41:00