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

XSLT跨节点元素分组问题:分组<wd:Stage>时XSLT无法运行

解决XSLT分组保留最新条目的问题

核心问题分析

你当前的分组逻辑方向是对的,但大概率是命名空间未正确声明或者Stage节点路径匹配异常导致XSLT无法运行。另外需要确保排序逻辑能正确识别日期时间类型,避免字符串排序的错误。

解决方案步骤

1. 确保命名空间一致

XML中使用了wd前缀,XSLT必须声明完全相同的命名空间URI,否则无法匹配任何节点。比如XML开头如果是:

<wd:Root xmlns:wd="http://workday.com/HR">

那XSLT的stylesheet标签必须加上:

xmlns:wd="http://workday.com/HR"

2. 修正分组与排序逻辑

假设你的主数据节点是wd:Job_Application,完整的分组+保留最新条目的代码如下:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="http://workday.com/HR">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <wd:Filtered_Applications>
      <!-- 按candidate、CF_LRV_Requisition_ID、Stage组合分组 -->
      <xsl:for-each-group select="wd:Root/wd:Job_Application" 
                          group-by="concat(wd:candidate, '|', wd:CF_LRV_Requisition_ID, '|', wd:Job_Application_Process_Statuses_group/wd:Stage/wd:ID)">
        <!-- 按更新时间倒序排序,最新条目排在首位 -->
        <xsl:sort select="wd:Last_Functionally_Updated" order="descending" data-type="dateTime"/>
        <!-- 保留每组的第一个条目(最新的) -->
        <xsl:copy-of select="current-group()[1]"/>
      </xsl:for-each-group>
    </wd:Filtered_Applications>
  </xsl:template>
</xsl:stylesheet>

3. 关键注意事项

  • 如果wd:Job_Application_Process_Statuses_group在每个主节点下有多个实例,需要明确指定取哪一个的Stage(比如wd:Job_Application_Process_Statuses_group[1]/wd:Stage/wd:ID),否则分组键会包含多个值导致异常。
  • 确认wd:Last_Functionally_Updated的格式是标准ISO日期时间(如2024-05-20T14:30:00),这样data-type="dateTime"才能正确排序。
  • 必须使用XSLT 2.0及以上版本,因为xsl:for-each-group是2.0版本新增的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:27:17