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

XSL XML分组优化:按SuperParent分组并调整节点层级结构

解决方案

要实现你想要的分组结构,我们需要在分组后区分两种元素:SuperParent与Id值相同的主元素,以及同组内的其他子元素,分别处理它们的输出格式。以下是修改后的XSLT代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:key name="groupBySuperParent" match="Element" use="SuperParent"/>

 <!-- 匹配根节点,输出外层ElementList -->
 <xsl:template match="/*">
  <ElementList>
   <xsl:apply-templates select="ElementList/Element[generate-id()=generate-id(key('groupBySuperParent',SuperParent)[1])]"/>
  </ElementList>
 </xsl:template>

 <!-- 处理每个分组的主节点 -->
 <xsl:template match="Element">
  <superparent id="{SuperParent}">
   <!-- 输出当前分组中SuperParent与Id相等的元素的所有子节点 -->
   <xsl:copy-of select="key('groupBySuperParent',SuperParent)[SuperParent=Id]/*"/>
   <!-- 处理同组内其他元素,转为element节点并排除Date -->
   <xsl:for-each select="key('groupBySuperParent',SuperParent)[not(SuperParent=Id)]">
    <element>
     <xsl:copy-of select="SuperParent | Id | Status"/>
    </element>
   </xsl:for-each>
  </superparent>
 </xsl:template>

 <!-- 抑制默认的Element节点输出 -->
 <xsl:template match="Element"/>
</xsl:stylesheet>

关键修改说明:

  • 根节点模板优化:直接选择分组的第一个元素进行处理,避免多余的模板匹配。
  • 分组内元素区分处理:
    • 首先通过key('groupBySuperParent',SuperParent)[SuperParent=Id]筛选出组内的主元素,直接复制它的所有子节点到<superparent>节点下。
    • 然后通过[not(SuperParent=Id)]筛选出同组的其他元素,将它们包装为<element>节点,并且只复制SuperParent、Id、Status节点(排除Date)。
  • 抑制默认输出:最后一个模板用来阻止原始的<Element>节点被默认输出,确保只有我们自定义的结构被生成。

用这个XSLT处理你的输入XML,就能得到你期望的输出结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:39:37