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

寻求XSLT代码:将EmpGlobalAssignment下的BenefitEnrollment移至EmpEmployment

XSLT实现BenefitEnrollment节点迁移与删除

需求说明

需要将EmpGlobalAssignment节点下的BenefitEnrollment子节点迁移到其父节点EmpEmployment层级下,同时删除原位置的该节点;对于BenefitEnrollment已经在EmpEmployment下的本地员工节点,保持原样不变。

输入XML示例

<Employees>
  <Employee>
    <EmpEmployment>
      <EmpID>employee1</EmpID>
      <EmpGlobalAssignment>
        <BenefitEnrollment>
          <Plan>Medical</Plan>
          <Status>Active</Status>
        </BenefitEnrollment>
        <AssignmentType>Global</AssignmentType>
      </EmpGlobalAssignment>
    </EmpEmployment>
  </Employee>
  <Employee>
    <EmpEmployment>
      <EmpID>employee2</EmpID>
      <BenefitEnrollment>
        <Plan>Dental</Plan>
        <Status>Active</Status>
      </BenefitEnrollment>
      <EmpGlobalAssignment>
        <AssignmentType>Local</AssignmentType>
      </EmpGlobalAssignment>
    </EmpEmployment>
  </Employee>
</Employees>

期望输出XML示例

<Employees>
  <Employee>
    <EmpEmployment>
      <EmpID>employee1</EmpID>
      <BenefitEnrollment>
        <Plan>Medical</Plan>
        <Status>Active</Status>
      </BenefitEnrollment>
      <EmpGlobalAssignment>
        <AssignmentType>Global</AssignmentType>
      </EmpGlobalAssignment>
    </EmpEmployment>
  </Employee>
  <Employee>
    <EmpEmployment>
      <EmpID>employee2</EmpID>
      <BenefitEnrollment>
        <Plan>Dental</Plan>
        <Status>Active</Status>
      </BenefitEnrollment>
      <EmpGlobalAssignment>
        <AssignmentType>Local</AssignmentType>
      </EmpGlobalAssignment>
    </EmpEmployment>
  </Employee>
</Employees>

解决方案XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 身份模板:复制所有未被匹配的节点和属性 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 处理EmpEmployment节点:先复制自身,再添加迁移的BenefitEnrollment -->
  <xsl:template match="EmpEmployment">
    <xsl:copy>
      <!-- 复制原EmpEmployment下的所有节点 -->
      <xsl:apply-templates select="@*|node()"/>
      <!-- 迁移EmpGlobalAssignment下的BenefitEnrollment到当前层级 -->
      <xsl:apply-templates select="EmpGlobalAssignment/BenefitEnrollment"/>
    </xsl:copy>
  </xsl:template>

  <!-- 跳过原位置的BenefitEnrollment,实现删除 -->
  <xsl:template match="EmpGlobalAssignment/BenefitEnrollment"/>
</xsl:stylesheet>

代码说明

  1. 身份模板:作为基础逻辑,默认复制所有未被特殊匹配的节点和属性,保证无需修改的内容原样保留。
  2. EmpEmployment模板:在复制自身及原有子节点后,额外将EmpGlobalAssignment下的BenefitEnrollment节点复制到当前层级,完成迁移操作。
  3. EmpGlobalAssignment/BenefitEnrollment模板:空模板匹配该路径下的节点,直接跳过复制,实现原位置节点的删除。

这套逻辑会自动适配两种员工类型:本地员工的BenefitEnrollment已在目标层级,不会重复添加;全球员工的对应节点会被迁移并删除原位置节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:17:15