【问题标题】:Transform Input XML to an output XML using templates使用模板将输入 XML 转换为输出 XML
【发布时间】:2015-12-12 07:07:50
【问题描述】:

我有一个输入 XML,我正在尝试将其转换为更结构化的 XML 输出。以下是构建数据的几个条件 -

1.如果Report_Entry节点没有Employee_ID子元素,则丢弃整个Report_Entry节点。

2.如果存在Employee_ID 节点,则合并所有具有相同Employee_ID 值的Report_Entry 节点。每个 Report_Entry 节点都将包含 Child 或 Spouse 的详细信息。这是根据Relationship 节点值确定的。如果关系是配偶,则添加一个新的子节点配偶并插入相关的详细信息(姓名、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>

【问题讨论】:

  • 请选择 XSLT1.0 或 2.0 - 不要同时选择两者。
  • @michael.hor257k - 我已删除 xslt 1.0,因为我的应用程序推荐使用 xslt 2.0。谢谢!

标签: xml xslt xpath xslt-2.0


【解决方案1】:

1.如果 Report_Entry 节点没有 Employee_ID 子元素,则丢弃整个 Report_Entry 节点。

2.如果 Employee_ID 节点存在,则合并所有具有相同 Employee_ID 值的 Report_Entry 节点。每个 Report_Entry 节点都有详细信息 孩子或配偶。这是根据关系确定的 节点值。如果关系是配偶,则添加一个新的子节点配偶 并插入相关详细信息(姓名、SSN、DoB 和 COBRA 详细信息)。 如果Relationship 是Child,则添加一个新的Dependent 节点并插入 相关细节。

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>

注意

每个 Report_Entry 节点都将包含孩子或配偶的详细信息。

在您的示例中,凯瑟琳布什既不是孩子也不是配偶 - 但您将她列为受抚养人。我认为这意味着任何非配偶的 Report_Entry 都是受抚养人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多