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

如何使用XSLT 1.0提取XML中YYYY/MM/DD格式的最大日期

XSLT 1.0 筛选最大日期节点实现方案

你给出的日期为固定YYYY/MM/DD格式,这类定长的年在前、月居中、日在后的日期字符串,字典序和实际日期大小顺序完全一致,不需要拆分年月日转数值比较,直接按字符串排序即可取到最大值。

基础实现代码

使用以下XSLT即可得到要求的输出结构:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Root">
    <xsl:copy>
      <xsl:for-each select="Element">
        <!-- 按StartDate属性倒序排列 -->
        <xsl:sort select="@StartDate" data-type="text" order="descending"/>
        <!-- 仅输出排序后第一个节点,即日期最大的节点 -->
        <xsl:if test="position() = 1">
          <xsl:copy-of select="."/>
        </xsl:if>
      </xsl:for-each>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

逻辑说明

  • 匹配输入XML的Root根节点,先复制根节点结构保证输出格式匹配要求
  • 遍历所有Element子节点时,通过<xsl:sort>按StartDate属性做倒序文本排序
  • 排序完成后取第一个节点输出,该节点的StartDate就是所有日期中的最大值

针对你给出的测试XML输入,运行上述XSLT后输出结果完全符合预期:

<Root>
  <Element StartDate="2013/12/31"/>
</Root>

可选扩展:保留所有同最大值的节点

如果数据中可能存在多个Element节点的StartDate同为最大值,需要全部输出,可以替换为以下写法:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Root">
    <xsl:copy>
      <!-- 先计算得到最大日期值 -->
      <xsl:variable name="maxDate">
        <xsl:for-each select="Element">
          <xsl:sort select="@StartDate" data-type="text" order="descending"/>
          <xsl:if test="position() = 1">
            <xsl:value-of select="@StartDate"/>
          </xsl:if>
        </xsl:for-each>
      </xsl:variable>
      <!-- 复制所有日期等于最大值的节点 -->
      <xsl:copy-of select="Element[@StartDate = $maxDate]"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:57:22