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

XSLT 1.0特定竖线间子字符串提取的简化方法问询

提取竖线分隔字符串中特定字段的简便方法

XSLT 2.0及以上版本

直接用tokenize()函数把字符串按|分割成序列,通过索引就能快速获取对应字段(XSLT序列索引从1开始):

比如提取你例子里第2个字段(第一个|和第二个|之间的5000935):

<td><xsl:value-of select="tokenize(., '\|')[2]"/></td>

要是想提取其他位置的字段,直接改索引就行。比如拿第5个字段(139566.66):

<td><xsl:value-of select="tokenize(., '\|')[5]"/></td>

空字段也能正确处理,比如第4个字段是空的,tokenize(., '\|')[4]会返回空字符串,完全符合需求。

XSLT 1.0版本

因为1.0没内置tokenize,可以写个递归模板来实现分割,之后通过索引取字段:

先定义递归模板:

<xsl:template name="get-field">
  <xsl:param name="string" select="."/>
  <xsl:param name="index" select="1"/>
  <xsl:param name="delimiter" select="'|'"/>
  
  <xsl:choose>
    <xsl:when test="$index = 1">
      <xsl:value-of select="substring-before(concat($string, $delimiter), $delimiter)"/>
    </xsl:when>
    <xsl:when test="contains($string, $delimiter)">
      <xsl:call-template name="get-field">
        <xsl:with-param name="string" select="substring-after($string, $delimiter)"/>
        <xsl:with-param name="index" select="$index - 1"/>
        <xsl:with-param name="delimiter" select="$delimiter"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text></xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

调用模板获取指定字段,比如第2个字段:

<td>
  <xsl:call-template name="get-field">
    <xsl:with-param name="index" select="2"/>
  </xsl:call-template>
</td>

要提取其他位置,改select="2"里的数字就行,空字段同样能正确返回空值。

这种方法比嵌套substring-before/substring-after简洁太多,不管提取哪个位置的字段,只需要调整索引,不用写多层嵌套的复杂表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:34:58