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

XSLT实现为XML每个record添加去重升序start_date新节点

实现代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />
      
    <xsl:template match="/">
        <root>
            <xsl:for-each select="//record">
             <record>
                <xsl:copy-of select="./*"/>
                <StartDates>
                    <!-- 取当前record下所有start_date值去重,按日期升序排列 -->
                    <xsl:for-each select="distinct-values(descendant::start_date/text())">
                        <xsl:sort select="xs:date(.)" order="ascending"/>
                        <start_date>
                            <xsl:value-of select="."/>
                        </start_date>
                    </xsl:for-each>
                </StartDates>
             </record>
            </xsl:for-each>
      </root>
    </xsl:template>
</xsl:stylesheet>

逻辑说明

  • 直接在生成StartDates节点的位置完成去重、排序逻辑,避免跨上下文取值错误
  • 用XSLT 2.0内置的distinct-values()函数对当前record下的所有start_date文本值去重,descendant::start_date限定了仅取当前循环的record节点下的后代节点,不会跨record取值
  • 排序时直接将日期字符串转为xs:date类型,ISO标准格式的日期可直接按日期规则排序,无需手动替换横杠转数字
  • 遍历去重排序后的日期值,逐个生成start_date节点,输出结果完全匹配预期要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:24:02