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

BizTalk Map XSLT求助:从XML节点末尾提取纯数字

在BizTalk Map的XSLT中提取字符串开头数字的解决方法

BizTalk默认使用XSLT 1.0,而你尝试的replace()是XSLT 2.0及以上版本的函数,所以会提示“replace是未知函数”。以下是两种适配XSLT 1.0的解决方案:

方法一:递归模板移除末尾非数字字符

这个方法会逐次检查字符串最后一个字符,直到剩下的最后一个字符是数字为止,适合处理末尾带任意非数字内容的场景。

首先在你的XSLT中添加递归模板:

<xsl:template name="TrimNonDigitsAtEnd">
  <xsl:param name="targetString"/>
  <xsl:choose>
    <!-- 空字符串直接返回 -->
    <xsl:when test="$targetString = ''">
      <xsl:text></xsl:text>
    </xsl:when>
    <!-- 最后一个字符是数字,返回当前字符串 -->
    <xsl:when test="translate(substring($targetString, string-length($targetString)), '0123456789', '') = ''">
      <xsl:value-of select="$targetString"/>
    </xsl:when>
    <!-- 最后一个字符非数字,递归处理去掉最后一个字符后的字符串 -->
    <xsl:otherwise>
      <xsl:call-template name="TrimNonDigitsAtEnd">
        <xsl:with-param name="targetString" select="substring($targetString, 1, string-length($targetString) - 1)"/>
      </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

然后在映射中调用该模板(注意节点名的空格需要转义,用方括号语法避免错误):

<xsl:variable name="originalValue" select="ns0:Expiration[local-name()='Calculation']"/>
<xsl:call-template name="TrimNonDigitsAtEnd">
  <xsl:with-param name="targetString" select="$originalValue"/>
</xsl:call-template>

在BizTalk Map里,你可以通过Scripting Functoid实现:选择“Inline XSLT Call Template”类型,把上面的模板代码粘贴进去,再将输入节点连接到该Functoid,Functoid输出连接到目标节点即可。

方法二:提取开头连续数字(适用于数字仅在开头连续的场景)

如果能确定输入字符串的数字是开头连续的,也可以用translate和字符串长度计算来直接提取:

<xsl:variable name="originalValue" select="ns0:Expiration[local-name()='Calculation']"/>
<!-- 生成仅包含原字符串中数字的临时字符串 -->
<xsl:variable name="allDigits" select="translate($originalValue, translate($originalValue, '0123456789', ''), '')"/>
<!-- 取原字符串开头对应长度的子串,保留连续数字 -->
<xsl:value-of select="substring($originalValue, 1, string-length($allDigits))"/>

这个方法更简洁,但只适用于数字集中在开头且连续的情况,如果中间穿插非数字会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:15:48