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

如何使用XSLT 2.0拆分XML并保留父节点生成多文件?

XSLT 2.0 拆分XML并保留父节点结构的解决方案

核心思路

遍历每个ItemGroup节点,为每个节点生成独立XML文件。生成时完整复制Root、Info、Group、Client等上层父节点结构,仅将Client下的ItemGroup列表替换为当前遍历的单个ItemGroup。

完整XSLT代码

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 匹配根节点,启动处理流程 -->
  <xsl:template match="/Root">
    <!-- 遍历所有ItemGroup节点 -->
    <xsl:for-each select="Group/Client/ItemGroup">
      <!-- 生成独立输出文件,文件名可根据节点属性/内容自定义 -->
      <xsl:result-document method="xml" indent="yes" href="item_{ItemID}.xml">
        <!-- 重构完整父节点结构 -->
        <Root>
          <!-- 复制Info节点及所有子内容 -->
          <xsl:copy-of select="../Info"/>
          <Group>
            <Client>
              <!-- 复制Client下除ItemGroup外的所有子节点 -->
              <xsl:copy-of select="../Client/*[not(local-name()='ItemGroup')]"/>
              <!-- 复制当前遍历的单个ItemGroup节点 -->
              <xsl:copy-of select="."/>
            </Client>
          </Group>
        </Root>
      </xsl:result-document>
    </xsl:for-each>
  </xsl:template>

  <!-- 屏蔽默认匹配规则,避免冗余输出 -->
  <xsl:template match="text()|@*"/>
</xsl:stylesheet>

关键代码说明

  • <xsl:result-document>:XSLT 2.0原生多文件输出能力,href属性支持动态命名(示例中用ItemID作为文件名标识)。
  • <xsl:copy-of>:完整复制目标节点及其所有子节点、属性,确保父结构的完整性和原始数据不变。
  • 节点过滤逻辑:../Client/*[not(local-name()='ItemGroup')]精准保留Client下非ItemGroup的子节点,避免原多ItemGroup列表残留。

输出示例

每个生成的XML文件将保留完整父层级,仅包含单个ItemGroup,示例如下:

<Root>
  <Info>
    <Name>TestProject</Name>
  </Info>
  <Group>
    <Client>
      <ClientID>CLT001</ClientID>
      <ItemGroup>
        <ItemID>ITEM001</ItemID>
        <ItemName>SampleItemA</ItemName>
      </ItemGroup>
    </Client>
  </Group>
</Root>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:35:13