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

XSLT匹配MultiplierFactorNumeric小数与Note文本提取对应内容

XSLT 折扣比例匹配对应Note标注实现方案

核心实现思路

  • 先将cbc:MultiplierFactorNumeric的百分比小数值乘以100后,格式化为3位长度、前位补零的数字编码,例如0.05转换为005
  • 在同层级的cbc:Note节点中查找包含上述3位编码、且符合[前缀]_[编码]_[目标文本]格式的节点
  • 截取编码后下划线拼接的文本段,和百分比数值一同输出

可直接复用的代码

替换你原有的for-each循环块即可:

<xsl:for-each select="./cac:AllowanceCharge/cbc:MultiplierFactorNumeric">
    <br/>
    <!-- 生成3位补零的匹配编码 -->
    <xsl:variable name="matchCode" select="format-number(. * 100, '000')"/>
    <!-- 查找匹配编码的Note节点 -->
    <xsl:variable name="matchedNote" select="../../cbc:Note[contains(., concat('_', $matchCode, '_'))][1]"/>
    
    <xsl:text> %</xsl:text>
    <xsl:value-of select="format-number(. * 100, '###.##0,00', 'european')"/>
    
    <!-- 匹配成功时输出对应标注文本 -->
    <xsl:if test="$matchedNote">
        <xsl:text> 对应标注:</xsl:text>
        <xsl:value-of select="substring-after($matchedNote, concat('_', $matchCode, '_'))"/>
    </xsl:if>
    <xsl:text>,</xsl:text>
</xsl:for-each>

关键逻辑说明

  • 编码生成环节:使用格式串000做格式化,会自动将数值补前导零到3位,不会出现小数分隔符、千分位符干扰匹配,例如0.03*100=3会自动转为003,完全匹配编码规则。
  • Note匹配环节:通过判断节点内容是否包含_三位编码_片段做匹配,不限制前缀内容,适配不同前缀的Note场景;末尾加[1]是为了避免多个匹配节点时出现内容重复。
  • 文本提取环节:直接用substring-after截取编码片段后的内容,无需拆分字符串,兼容XSLT 1.0/2.0/3.0全版本,不需要依赖额外扩展函数。

适配调整提示

  • 如果你确定有效Note都是固定11_前缀,可以把匹配条件改成../../cbc:Note[starts-with(., '11_') and substring(.,4,3) = $matchCode][1],匹配效率更高。
  • 如果需要区分折扣/附加费,可以在循环内加对同级cbc:ChargeIndicator节点值的判断,分别输出不同前缀文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:27:18