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

XSLT如何提取XML中bong节点横杠后最大数值填充到REFERENCE

实现方案

你可以通过排序取首位的方式实现XSLT 1.0下的最大值提取,无需额外扩展函数,修改后的完整代码如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns3="http://NEXSTEP.Schemas.Kasseoppgjor" xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes" exclude-result-prefixes="ns2 ns3">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/ns3:oppgjor">
    <CASH_REGISTER_REPORT>
      <REFERENCE>
        <xsl:for-each select="MESSAGE_RECORD/InsertChange/bonger/bong">
          <!-- 提取横杠后的数字转数值,按降序排序 -->
          <xsl:sort select="number(substring-after(., '-'))" data-type="number" order="descending"/>
          <!-- 取排序后的第一个值即为最大值 -->
          <xsl:if test="position() = 1">
            <xsl:value-of select="substring-after(., '-')"/>
          </xsl:if>
        </xsl:for-each>
      </REFERENCE>
    </CASH_REGISTER_REPORT>
  </xsl:template>
</xsl:stylesheet>

逻辑说明

  1. 原有代码中匹配所有元素的通用模板是冗余的,因为根节点匹配模板已经覆盖了全部输出逻辑,直接删除即可
  2. 通过substring-after(., '-')提取每个bong节点值中横杠后的部分
  3. 使用xsl:sort对提取的数值做降序排序,排序后第一个节点对应的值就是所有数字的最大值

如果你的运行环境支持XSLT 2.0及以上版本,可以用更简洁的写法,直接调用max()函数实现:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns3="http://NEXSTEP.Schemas.Kasseoppgjor" xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes" exclude-result-prefixes="ns2 ns3">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/ns3:oppgjor">
    <CASH_REGISTER_REPORT>
      <REFERENCE>
        <xsl:value-of select="max(MESSAGE_RECORD/InsertChange/bonger/bong/number(substring-after(., '-')))"/>
      </REFERENCE>
    </CASH_REGISTER_REPORT>
  </xsl:template>
</xsl:stylesheet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:03