使用模板将输入 XML 转换为输出 XML
Transform Input XML to an output XML using templates
我有一个输入 XML,我正试图将其转换为更结构化的 XML 输出。以下是构建数据的几个条件 -
1.If Report_Entry
节点没有 Employee_ID
child 元素,然后丢弃整个 Report_Entry
节点。
2.If Employee_ID
节点存在,然后合并具有相同 Employee_ID
值的所有 Report_Entry
节点。每个 Report_Entry 节点都将包含 Child 或配偶的详细信息。这是根据 Relationship
节点值确定的。如果 Relationship 是 Spouse,则添加一个新的 child 节点 Spouse 并插入相关详细信息(姓名、SSN、DoB 和 COBRA 详细信息)。如果 Relationship 是 Child 则添加一个新的 Dependent 节点并将相关详细信息插入其中。
<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records">
<wd:Report_Entry>
<wd:Dependent_Name></wd:Dependent_Name>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-11</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-10</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - Delta Dental PPO BREG</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-13</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-11</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Medical-US - Local 32</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>1003413</wd:Employee_ID>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Matthew Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Matthew</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1970-12-07</wd:Dependent_Date_of_Birth>
<wd:Relationship>Spouse</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>1003413</wd:Employee_ID>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Katherine Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Katherine</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1999-12-07</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Audrie Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Audrie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2011-10-19</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-03</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-11-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Colton Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Colton</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2009-10-29</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-20</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-10</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence (LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Kaelyn Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Kaelyn</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2004-09-25</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-01</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-20</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Eliza Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Eliza</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1988-11-01</wd:Dependent_Date_of_Birth>
<wd:Relationship>Spouse</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-03</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence (LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Medical-US - Local 501 HMO</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Andria Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Andria</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2000-11-01</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-05</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-02</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>9100637</wd:Employee_ID>
<wd:Worker_Name>Cheri Holtzworth (Retired - Active)</wd:Worker_Name>
<wd:Dependent_Name>Annie Holtzworth</wd:Dependent_Name>
<wd:Dependent_First_Name>Annie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Holtzworth</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1989-10-04</wd:Dependent_Date_of_Birth>
<wd:Relationship>Spouse</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-29</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-28</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Death of Employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Healthcare FSA - Empire FSA</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
</wd:Report_Data>
我想要这种格式的输出 -
<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records">
<wd:Report_Entry>
<wd:Employee_ID>1003413</wd:Employee_ID>
<wd:Spouse>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Matthew Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Matthew</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1970-12-07</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered
employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Spouse>
<wd:Dependent>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Katherine Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Katherine</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1999-12-07</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Audrie Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Audrie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2011-10-19</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-03</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-11-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Colton Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Colton</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-20</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-10</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence
(LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Kaelyn Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Kaelyn</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2004-09-25</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-01</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-20</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
<wd:Spouse>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Eliza Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Eliza</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1988-11-01</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-03</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence
(LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Medical-US - Local 501 HMO</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered
employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Spouse>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Andria Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Andria</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2000-11-01</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-05</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-02</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>9100637</wd:Employee_ID>
<wd:Spouse>
<wd:Worker_Name>Cheri Holtzworth (Retired - Active)</wd:Worker_Name>
<wd:Dependent_Name>Annie Holtzworth</wd:Dependent_Name>
<wd:Dependent_First_Name>Annie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Holtzworth</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1989-10-04</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-29</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-28</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Death of
Employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Healthcare FSA - Empire FSA</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Spouse>
</wd:Report_Entry>
</wd:Report_Data>
我试图找出如何使用模板并创建了一个 XSLT,但无法编写正确的逻辑来获得所需的输出 -
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:wd="urn:com.workday/DNU_CR_Dependents_COBRA_Records">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="wd:Report_Data">
<wd:Report_Data xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records"><wd:Report_Entry><xsl:apply-templates select="wd:Report_Entry"/>
</wd:Report_Entry>
</wd:Report_Data>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<wd:Dependent><xsl:apply-templates select="wd:Worker_Name"/>
<xsl:apply-templates select="wd:Dependent_Name"/>
<xsl:apply-templates select="wd:Dependent_First_Name"/>
<xsl:apply-templates select="wd:Dependent_Last_Name"/>
<xsl:apply-templates select="wd:Dependent_Date_of_Birth"/>
<xsl:apply-templates select="wd:Dependent_COBRA_Records_within_Range"/>
</wd:Dependent>
</xsl:template>
<xsl:template match="wd:Dependent_COBRA_Records_within_Range">
<wd:Dependent_COBRA_Records_within_Range><xsl:apply-templates select="wd:Dependent_COBRA_Eligible_Date"/>
<xsl:apply-templates select="wd:Dependent_Qualifying_Event_Date"/>
</wd:Dependent_COBRA_Records_within_Range>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<wd:Report_Entry><xsl:apply-templates select="wd:Employee_ID"/>
<wd:Spouse><xsl:apply-templates select="wd:Worker_Name"/>
<xsl:apply-templates select="wd:Dependent_Name"/>
<xsl:apply-templates select="wd:Dependent_First_Name"/>
<xsl:apply-templates select="wd:Dependent_Last_Name"/>
<xsl:apply-templates select="wd:Dependent_Date_of_Birth"/>
<xsl:apply-templates select="wd:Dependent_COBRA_Records_within_Range"/>
</wd:Spouse>
</wd:Report_Entry>
</xsl:template>
<xsl:template match="wd:Dependent_Qualifying_Event_Date">
<wd:Dependent_Qualifying_Event_Date><xsl:value-of select="."/></wd:Dependent_Qualifying_Event_Date>
</xsl:template>
<xsl:template match="wd:Employee_ID">
<wd:Employee_ID><xsl:value-of select="."/></wd:Employee_ID>
</xsl:template>
<xsl:template match="wd:Worker_Name">
<wd:Worker_Name><xsl:value-of select="."/></wd:Worker_Name>
</xsl:template>
<xsl:template match="wd:Dependent_Name">
<wd:Dependent_Name><xsl:value-of select="."/></wd:Dependent_Name>
</xsl:template>
<xsl:template match="wd:Dependent_First_Name">
<wd:Dependent_First_Name><xsl:value-of select="."/></wd:Dependent_First_Name>
</xsl:template>
<xsl:template match="wd:Dependent_Last_Name">
<wd:Dependent_Last_Name><xsl:value-of select="."/></wd:Dependent_Last_Name>
</xsl:template>
<xsl:template match="wd:Dependent_Date_of_Birth">
<wd:Dependent_Date_of_Birth><xsl:value-of select="."/></wd:Dependent_Date_of_Birth>
</xsl:template>
<xsl:template match="wd:Dependent_COBRA_Eligible_Date">
<wd:Dependent_COBRA_Eligible_Date><xsl:value-of select="."/></wd:Dependent_COBRA_Eligible_Date>
</xsl:template>
<xsl:template match="wd:Dependent_COBRA_Eligible_Date">
<wd:Dependent_Qualifying_Event_Date><xsl:value-of select="."/></wd:Dependent_Qualifying_Event_Date>
</xsl:template>
<xsl:template match="wd:Dependent_Qualifying_Event_Date">
<wd:Dependent_COBRA_Eligible_Date><xsl:value-of select="."/></wd:Dependent_COBRA_Eligible_Date>
</xsl:template>
<xsl:template match="wd:Dependent_Benefit_Plan">
<wd:Dependent_Benefit_Plan><xsl:value-of select="."/></wd:Dependent_Benefit_Plan>
</xsl:template>
</xsl:stylesheet>
1.If Report_Entry node doesn't have a Employee_ID child element, then discard whole Report_Entry node.
2.If Employee_ID node exists then merge all the Report_Entry nodes with same Employee_ID value. Every Report_Entry node will have details
of either Child or Spouse. This is determined based on Relationship
node value. If Relationship is Spouse then add a new child node Spouse
and insert the dependent details (name, SSN, DoB and COBRA details).
If Relationship is Child then add a new Dependent node and insert the
dependent details into it.
AFAICT,所有这些要求都可以满足:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/wd:Report_Data">
<xsl:copy>
<xsl:for-each-group select="wd:Report_Entry[wd:Employee_ID]" group-by="wd:Employee_ID">
<wd:Report_Entry>
<xsl:copy-of select="wd:Employee_ID"/>
<xsl:apply-templates select="current-group()"/>
</wd:Report_Entry>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<xsl:element name="wd:{if (wd:Relationship='Spouse') then 'Spouse' else 'Dependent'}">
<xsl:apply-templates select="wd:Worker_Name | wd:Dependent_Name | wd:Dependent_First_Name | wd:Dependent_Last_Name | wd:Dependent_Date_of_Birth | wd:Dependent_COBRA_Records_within_Range"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
注意:
Every Report_Entry node will have details of either Child or Spouse.
在您的示例中,凯瑟琳·布什既不是 Child 也不是配偶 - 但您将她列为受抚养人。我认为这意味着 任何 Report_Entry 不是配偶的人都是受抚养人。
我有一个输入 XML,我正试图将其转换为更结构化的 XML 输出。以下是构建数据的几个条件 -
1.If Report_Entry
节点没有 Employee_ID
child 元素,然后丢弃整个 Report_Entry
节点。
2.If Employee_ID
节点存在,然后合并具有相同 Employee_ID
值的所有 Report_Entry
节点。每个 Report_Entry 节点都将包含 Child 或配偶的详细信息。这是根据 Relationship
节点值确定的。如果 Relationship 是 Spouse,则添加一个新的 child 节点 Spouse 并插入相关详细信息(姓名、SSN、DoB 和 COBRA 详细信息)。如果 Relationship 是 Child 则添加一个新的 Dependent 节点并将相关详细信息插入其中。
<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records">
<wd:Report_Entry>
<wd:Dependent_Name></wd:Dependent_Name>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-11</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-10</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - Delta Dental PPO BREG</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-13</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-11</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Medical-US - Local 32</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>1003413</wd:Employee_ID>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Matthew Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Matthew</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1970-12-07</wd:Dependent_Date_of_Birth>
<wd:Relationship>Spouse</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>1003413</wd:Employee_ID>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Katherine Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Katherine</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1999-12-07</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Audrie Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Audrie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2011-10-19</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-03</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-11-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Colton Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Colton</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2009-10-29</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-20</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-10</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence (LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Kaelyn Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Kaelyn</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2004-09-25</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-01</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-20</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Eliza Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Eliza</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1988-11-01</wd:Dependent_Date_of_Birth>
<wd:Relationship>Spouse</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-03</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence (LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Medical-US - Local 501 HMO</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Andria Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Andria</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2000-11-01</wd:Dependent_Date_of_Birth>
<wd:Relationship>Child</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-05</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-02</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>9100637</wd:Employee_ID>
<wd:Worker_Name>Cheri Holtzworth (Retired - Active)</wd:Worker_Name>
<wd:Dependent_Name>Annie Holtzworth</wd:Dependent_Name>
<wd:Dependent_First_Name>Annie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Holtzworth</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1989-10-04</wd:Dependent_Date_of_Birth>
<wd:Relationship>Spouse</wd:Relationship>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-29</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-28</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Death of Employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Healthcare FSA - Empire FSA</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Report_Entry>
</wd:Report_Data>
我想要这种格式的输出 -
<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records">
<wd:Report_Entry>
<wd:Employee_ID>1003413</wd:Employee_ID>
<wd:Spouse>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Matthew Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Matthew</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1970-12-07</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered
employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Spouse>
<wd:Dependent>
<wd:Worker_Name>Amy Bush</wd:Worker_Name>
<wd:Dependent_Name>Katherine Bush</wd:Dependent_Name>
<wd:Dependent_First_Name>Katherine</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Bush</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1999-12-07</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-02</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>2001679</wd:Employee_ID>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Audrie Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Audrie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2011-10-19</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-03</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-11-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Colton Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Colton</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-20</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-10</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence
(LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Kaelyn Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Kaelyn</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2004-09-25</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-11-01</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-20</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
<wd:Spouse>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Eliza Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Eliza</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1988-11-01</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-03</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Leave of Absence
(LTD)</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Medical-US - Local 501 HMO</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-09-06</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-09-01</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Spouse - Divorce or legal separation of the covered
employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Spouse>
<wd:Dependent>
<wd:Worker_Name>Phuong-Thao Li (On Leave)</wd:Worker_Name>
<wd:Dependent_Name>Andria Li</wd:Dependent_Name>
<wd:Dependent_First_Name>Andria</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Li</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>2000-11-01</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-05</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-02</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Dependent Children - Loss of dependent child status
under the plan rules</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Dental-US - MetLife Dental PPO
Hawaii</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Dependent>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>9100637</wd:Employee_ID>
<wd:Spouse>
<wd:Worker_Name>Cheri Holtzworth (Retired - Active)</wd:Worker_Name>
<wd:Dependent_Name>Annie Holtzworth</wd:Dependent_Name>
<wd:Dependent_First_Name>Annie</wd:Dependent_First_Name>
<wd:Dependent_Last_Name>Holtzworth</wd:Dependent_Last_Name>
<wd:Dependent_Date_of_Birth>1989-10-04</wd:Dependent_Date_of_Birth>
<wd:Dependent_COBRA_Records_within_Range>
<wd:Dependent_COBRA_Eligible_Date>2015-10-29</wd:Dependent_COBRA_Eligible_Date>
<wd:Dependent_Qualifying_Event_Date>2015-10-28</wd:Dependent_Qualifying_Event_Date>
<wd:Dependent_Eligibility_Reason>Employee - Death of
Employee</wd:Dependent_Eligibility_Reason>
<wd:Dependent_Benefit_Plan>Healthcare FSA - Empire FSA</wd:Dependent_Benefit_Plan>
</wd:Dependent_COBRA_Records_within_Range>
</wd:Spouse>
</wd:Report_Entry>
</wd:Report_Data>
我试图找出如何使用模板并创建了一个 XSLT,但无法编写正确的逻辑来获得所需的输出 -
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:wd="urn:com.workday/DNU_CR_Dependents_COBRA_Records">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="wd:Report_Data">
<wd:Report_Data xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records"><wd:Report_Entry><xsl:apply-templates select="wd:Report_Entry"/>
</wd:Report_Entry>
</wd:Report_Data>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<wd:Dependent><xsl:apply-templates select="wd:Worker_Name"/>
<xsl:apply-templates select="wd:Dependent_Name"/>
<xsl:apply-templates select="wd:Dependent_First_Name"/>
<xsl:apply-templates select="wd:Dependent_Last_Name"/>
<xsl:apply-templates select="wd:Dependent_Date_of_Birth"/>
<xsl:apply-templates select="wd:Dependent_COBRA_Records_within_Range"/>
</wd:Dependent>
</xsl:template>
<xsl:template match="wd:Dependent_COBRA_Records_within_Range">
<wd:Dependent_COBRA_Records_within_Range><xsl:apply-templates select="wd:Dependent_COBRA_Eligible_Date"/>
<xsl:apply-templates select="wd:Dependent_Qualifying_Event_Date"/>
</wd:Dependent_COBRA_Records_within_Range>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<wd:Report_Entry><xsl:apply-templates select="wd:Employee_ID"/>
<wd:Spouse><xsl:apply-templates select="wd:Worker_Name"/>
<xsl:apply-templates select="wd:Dependent_Name"/>
<xsl:apply-templates select="wd:Dependent_First_Name"/>
<xsl:apply-templates select="wd:Dependent_Last_Name"/>
<xsl:apply-templates select="wd:Dependent_Date_of_Birth"/>
<xsl:apply-templates select="wd:Dependent_COBRA_Records_within_Range"/>
</wd:Spouse>
</wd:Report_Entry>
</xsl:template>
<xsl:template match="wd:Dependent_Qualifying_Event_Date">
<wd:Dependent_Qualifying_Event_Date><xsl:value-of select="."/></wd:Dependent_Qualifying_Event_Date>
</xsl:template>
<xsl:template match="wd:Employee_ID">
<wd:Employee_ID><xsl:value-of select="."/></wd:Employee_ID>
</xsl:template>
<xsl:template match="wd:Worker_Name">
<wd:Worker_Name><xsl:value-of select="."/></wd:Worker_Name>
</xsl:template>
<xsl:template match="wd:Dependent_Name">
<wd:Dependent_Name><xsl:value-of select="."/></wd:Dependent_Name>
</xsl:template>
<xsl:template match="wd:Dependent_First_Name">
<wd:Dependent_First_Name><xsl:value-of select="."/></wd:Dependent_First_Name>
</xsl:template>
<xsl:template match="wd:Dependent_Last_Name">
<wd:Dependent_Last_Name><xsl:value-of select="."/></wd:Dependent_Last_Name>
</xsl:template>
<xsl:template match="wd:Dependent_Date_of_Birth">
<wd:Dependent_Date_of_Birth><xsl:value-of select="."/></wd:Dependent_Date_of_Birth>
</xsl:template>
<xsl:template match="wd:Dependent_COBRA_Eligible_Date">
<wd:Dependent_COBRA_Eligible_Date><xsl:value-of select="."/></wd:Dependent_COBRA_Eligible_Date>
</xsl:template>
<xsl:template match="wd:Dependent_COBRA_Eligible_Date">
<wd:Dependent_Qualifying_Event_Date><xsl:value-of select="."/></wd:Dependent_Qualifying_Event_Date>
</xsl:template>
<xsl:template match="wd:Dependent_Qualifying_Event_Date">
<wd:Dependent_COBRA_Eligible_Date><xsl:value-of select="."/></wd:Dependent_COBRA_Eligible_Date>
</xsl:template>
<xsl:template match="wd:Dependent_Benefit_Plan">
<wd:Dependent_Benefit_Plan><xsl:value-of select="."/></wd:Dependent_Benefit_Plan>
</xsl:template>
</xsl:stylesheet>
1.If Report_Entry node doesn't have a Employee_ID child element, then discard whole Report_Entry node.
2.If Employee_ID node exists then merge all the Report_Entry nodes with same Employee_ID value. Every Report_Entry node will have details of either Child or Spouse. This is determined based on Relationship node value. If Relationship is Spouse then add a new child node Spouse and insert the dependent details (name, SSN, DoB and COBRA details). If Relationship is Child then add a new Dependent node and insert the dependent details into it.
AFAICT,所有这些要求都可以满足:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/DNU_CR_Dependents_COBRA_Records">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/wd:Report_Data">
<xsl:copy>
<xsl:for-each-group select="wd:Report_Entry[wd:Employee_ID]" group-by="wd:Employee_ID">
<wd:Report_Entry>
<xsl:copy-of select="wd:Employee_ID"/>
<xsl:apply-templates select="current-group()"/>
</wd:Report_Entry>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<xsl:element name="wd:{if (wd:Relationship='Spouse') then 'Spouse' else 'Dependent'}">
<xsl:apply-templates select="wd:Worker_Name | wd:Dependent_Name | wd:Dependent_First_Name | wd:Dependent_Last_Name | wd:Dependent_Date_of_Birth | wd:Dependent_COBRA_Records_within_Range"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
注意:
Every Report_Entry node will have details of either Child or Spouse.
在您的示例中,凯瑟琳·布什既不是 Child 也不是配偶 - 但您将她列为受抚养人。我认为这意味着 任何 Report_Entry 不是配偶的人都是受抚养人。