寻求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>
代码说明
- 身份模板:作为基础逻辑,默认复制所有未被特殊匹配的节点和属性,保证无需修改的内容原样保留。
- EmpEmployment模板:在复制自身及原有子节点后,额外将
EmpGlobalAssignment下的BenefitEnrollment节点复制到当前层级,完成迁移操作。 - EmpGlobalAssignment/BenefitEnrollment模板:空模板匹配该路径下的节点,直接跳过复制,实现原位置节点的删除。
这套逻辑会自动适配两种员工类型:本地员工的BenefitEnrollment已在目标层级,不会重复添加;全球员工的对应节点会被迁移并删除原位置节点。
内容的提问来源于stack exchange,提问作者piuser
相关产品推荐
相关产品推荐

