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

如何使用XSLT1.0从XML日期列筛选最大日期对应数据

XSLT1.0 提取COL4最大日期对应的PositionMaster节点

核心思路

XSLT1.0没有原生的max()函数,需先通过排序找到最大日期值,再筛选出对应日期的PositionMaster节点。

示例XML数据

<Root>
  <PositionMaster>
    <COL1>POS001</COL1>
    <COL2>DeptA</COL2>
    <COL3>Manager</COL3>
    <COL4>2024-04-15</COL4>
  </PositionMaster>
  <PositionMaster>
    <COL1>POS002</COL1>
    <COL2>DeptB</COL2>
    <COL3>Engineer</COL3>
    <COL4>2024-05-20</COL4>
  </PositionMaster>
  <PositionMaster>
    <COL1>POS003</COL1>
    <COL2>DeptC</COL2>
    <COL3>Analyst</COL3>
    <COL4>2024-05-20</COL4>
  </PositionMaster>
</Root>

修改后的XSLT1.0代码

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

  <!-- 获取所有PositionMaster节点中COL4的最大日期 -->
  <xsl:variable name="maxDate">
    <xsl:for-each select="/Root/PositionMaster">
      <!-- 按COL4降序排序(ISO日期格式下文本排序有效) -->
      <xsl:sort select="COL4" data-type="text" order="descending"/>
      <xsl:if test="position() = 1">
        <xsl:value-of select="COL4"/>
      </xsl:if>
    </xsl:for-each>
  </xsl:variable>

  <!-- 输出根节点及对应最大日期的PositionMaster -->
  <xsl:template match="/">
    <Root>
      <!-- 复制所有COL4等于最大日期的PositionMaster节点 -->
      <xsl:copy-of select="/Root/PositionMaster[COL4 = $maxDate]"/>
    </Root>
  </xsl:template>
</xsl:stylesheet>

关键说明

  • 排序取最大日期:通过xsl:for-each遍历所有PositionMaster,按COL4降序排序后取第一个节点的日期值,存入变量$maxDate。
  • 筛选匹配节点:用xsl:copy-of复制所有COL4值等于$maxDate的PositionMaster节点,仅保留最大日期对应的数据。
  • 非ISO日期适配:如果COL4是DD/MM/YYYY这类非ISO格式,需拆分字符串重组为可排序格式后再执行排序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:59:49