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

XSLT提取无空格键值串中17=对应值时如何去除多余字符?

解决XSLT提取键17对应值的问题

我懂你的困扰啦!你当前的XSLT代码之所以多出来末尾的20,是因为substring-before(substring-after(.,'17='), '=')只会找17=之后第一个=的位置,而你的下一个键是20=,所以这个=前面的20会被一起包含到结果里,导致输出变成MG127AJ4015AG1A20。

下面针对不同XSLT版本给你对应的解决方案:

XSLT 2.0及以上版本(推荐)

利用正则表达式可以轻松搞定这个问题,直接匹配17=之后到第一个数字+等号之前的内容:

<xsl:value-of select="replace(., '.*17=(.*?)([0-9]+=).*', '$1')"/>

这个表达式的逻辑很清晰:

  • .*17=:匹配到17=之前的所有内容
  • (.*?):非贪婪匹配17=之后的内容(也就是我们要的目标值)
  • ([0-9]+=):匹配下一个键的开头(数字+等号)
  • $1:提取第一个括号里匹配到的目标内容

XSLT 1.0版本(无正则支持)

因为XSLT1.0没有原生正则,我们可以写一个递归模板来逐个字符判断,直到遇到下一个键的开头(数字)为止:

<xsl:template name="extract-17-value">
  <xsl:param name="remaining-text"/>
  <xsl:choose>
    <!-- 如果当前剩余文本以数字开头,说明到下一个键了,停止递归 -->
    <xsl:when test="starts-with($remaining-text, '0') or starts-with($remaining-text, '1') or 
                    starts-with($remaining-text, '2') or starts-with($remaining-text, '3') or 
                    starts-with($remaining-text, '4') or starts-with($remaining-text, '5') or 
                    starts-with($remaining-text, '6') or starts-with($remaining-text, '7') or 
                    starts-with($remaining-text, '8') or starts-with($remaining-text, '9')">
    </xsl:when>
    <xsl:otherwise>
      <!-- 输出当前第一个字符,然后递归处理剩余文本 -->
      <xsl:value-of select="substring($remaining-text, 1, 1)"/>
      <xsl:call-template name="extract-17-value">
        <xsl:with-param name="remaining-text" select="substring($remaining-text, 2)"/>
      </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

调用这个模板的时候,先传入17=之后的文本:

<xsl:call-template name="extract-17-value">
  <xsl:with-param name="remaining-text" select="substring-after(., '17=')"/>
</xsl:call-template>

这样就能准确提取到MG127AJ4015AG1A这个目标值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:51:07