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

基于相同band区间匹配多类Rate金额的XSLT处理问题

解决方案

修正后的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8"/>

  <!-- 按band值给Rate节点分组,方便快速查找同区间的不同类型记录 -->
  <xsl:key name="rateGroupByBand" match="Rate" use="band"/>

  <xsl:template match="/">
    <!-- 输出表头 -->
    <xsl:text>区间 | Life金额 | Add金额&#10;</xsl:text>
    <xsl:text>------------------------&#10;</xsl:text>

    <!-- 遍历每个唯一的band分组(去重处理) -->
    <xsl:for-each select="Rates/Rate[generate-id() = generate-id(key('rateGroupByBand', band)[1])]">
      <xsl:variable name="currentBand" select="band"/>
      <!-- 输出当前区间 -->
      <xsl:value-of select="$currentBand"/>
      <xsl:text> | </xsl:text>

      <!-- 抓取当前区间下Life类型的金额 -->
      <xsl:value-of select="key('rateGroupByBand', $currentBand)[type='Life']/amount"/>
      <xsl:text> | </xsl:text>

      <!-- 抓取当前区间下Add类型的金额 -->
      <xsl:value-of select="key('rateGroupByBand', $currentBand)[type='Add']/amount"/>
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

核心改进点

  • 分组去重:通过generate-id()对比,确保每个band只处理一次,解决你之前重复显示Life金额的问题。
  • 精准筛选:利用定义的xsl:key,快速定位同区间下的Life/Add类型节点,直接提取对应金额,不会混取其他类型的数据。
  • 高效查找:xsl:key相当于给band建了索引,比循环遍历整个XML找同区间节点效率更高,尤其是数据量大的时候。

适配说明

如果你的输入XML结构不是Rates下直接挂Rate(比如有更深层级或命名空间),只需调整match和select里的节点路径即可。例如XML是<Root><RateList><Rate>...</Rate></RateList></Root>,就把select="Rates/Rate"改成select="Root/RateList/Rate"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:02:09