XSLT: значения из разных узлов, которые должны быть сгруппированы на основе значения из другого узла - PullRequest
0 голосов
/ 25 апреля 2020

Мое требование - для работника 11226, поскольку работник зарегистрировал два плана страхования: жизнь супруга и дополнительная жизнь, мне нужно вывести соответствующие суммы в один ряд. С помощью приведенного ниже кода xslt я смог собрать оба плана в одну строку, но не смог извлечь соответствующие суммы. Подскажите, пожалуйста, как мне получить соответствующие суммы плана?

<wd:Report_Data
    xmlns:wd="urn:com.workday.report/RPT_EOI_INT016">

    <wd:Report_Entry>
        <wd:WORKER_GROUP>
            <wd:W_Employee_ID>11464</wd:W_Employee_ID>
        </wd:WORKER_GROUP>
        <wd:EOI_BPLAN wd:Descriptor="Supplemental Life - Symetra  (Employee)">
            <wd:ID wd:type="WID">542f6c2d0e4101ac20ce49dbb22146e7</wd:ID>
            <wd:ID wd:type="Insurance_Coverage_Plan_ID">Supplemental Life - Symetra (Employee)</wd:ID>
        </wd:EOI_BPLAN>
        <wd:AMOUNT_APPLIED wd:Descriptor="$220,000">
            <wd:ID wd:type="WID">542f6c2d0e41017b8dfbf6c4b1219f02</wd:ID>
            <wd:ID wd:type="Currency_Coverage_Master_Amount_ID">220000</wd:ID>
        </wd:AMOUNT_APPLIED>
        <wd:EOI_EVENT wd:Descriptor="Marital Status - Marriage / Domestic Partnership">
            <wd:ID wd:type="WID">542f6c2d0e4101b7156c09beb221f0be</wd:ID>
            <wd:ID wd:type="Benefit_Event_Type_ID">Marital_Status_-_Marriage</wd:ID>
            <wd:ID wd:type="Benefit_Life_Event_Type_ID">Marital_Status_-_Marriage</wd:ID>
        </wd:EOI_EVENT>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:WORKER_GROUP>
            <wd:W_Employee_ID>11226</wd:W_Employee_ID>
        </wd:WORKER_GROUP>
        <wd:EOI_BPLAN wd:Descriptor="Supplemental Life - Symetra  (Employee)">
            <wd:ID wd:type="WID">542f6c2d0e4101ac20ce49dbb22146e7</wd:ID>
            <wd:ID wd:type="Insurance_Coverage_Plan_ID">Supplemental Life - Symetra
                (Employee)</wd:ID>
        </wd:EOI_BPLAN>
        <wd:INFORCE_AMOUNT wd:Descriptor="$140,000">
            <wd:ID wd:type="WID">542f6c2d0e410197b9e2f5c4b1218f02</wd:ID>
            <wd:ID wd:type="Currency_Coverage_Master_Amount_ID">140000</wd:ID>
        </wd:INFORCE_AMOUNT>
        <wd:AMOUNT_APPLIED wd:Descriptor="$750,000">
            <wd:ID wd:type="WID">542f6c2d0e41017cc8d4fcc4b121f002</wd:ID>
            <wd:ID wd:type="Currency_Coverage_Master_Amount_ID">750000</wd:ID>
        </wd:AMOUNT_APPLIED>
        <wd:EOI_EVENT wd:Descriptor="Employee or Dependent Gains/Loses Other Coverage">
            <wd:ID wd:type="WID">542f6c2d0e4101e697a909beb221f1be</wd:ID>
            <wd:ID wd:type="Benefit_Event_Type_ID">Employee_or_Dependent_Gains/Loses_Other_Coverage</wd:ID>
            <wd:ID wd:type="Benefit_Life_Event_Type_ID">Employee_or_Dependent_Gains/Loses_Other_Coverage</wd:ID>
        </wd:EOI_EVENT>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:WORKER_GROUP>
            <wd:W_Employee_ID>11226</wd:W_Employee_ID>
        </wd:WORKER_GROUP>
        <wd:EOI_BPLAN wd:Descriptor="Spouse Life - Symetra  (Spouse/Domestic Partner)">
            <wd:ID wd:type="WID">542f6c2d0e41015be90a63dbb221afe7</wd:ID>
            <wd:ID wd:type="Insurance_Coverage_Plan_ID">Spouse Life - Symetra (Spouse/Domestic
                Partner)</wd:ID>
        </wd:EOI_BPLAN>
        <wd:AMOUNT_APPLIED wd:Descriptor="$250,000">
            <wd:ID wd:type="WID">542f6c2d0e4101c1a255f7c4b121a502</wd:ID>
            <wd:ID wd:type="Currency_Coverage_Master_Amount_ID">250000</wd:ID>
        </wd:AMOUNT_APPLIED>
        <wd:EOI_EVENT wd:Descriptor="Employee or Dependent Gains/Loses Other Coverage">
            <wd:ID wd:type="WID">542f6c2d0e4101e697a909beb221f1be</wd:ID>
            <wd:ID wd:type="Benefit_Event_Type_ID">Employee_or_Dependent_Gains/Loses_Other_Coverage</wd:ID>
            <wd:ID wd:type="Benefit_Life_Event_Type_ID">Employee_or_Dependent_Gains/Loses_Other_Coverage</wd:ID>
        </wd:EOI_EVENT>
    </wd:Report_Entry>
</wd:Report_Data>

Вот мой код xslt, который я использовал

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet exclude-result-prefixes="xsl" version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:this="this.file/eib" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wd="urn:com.workday.report/RPT_EOI_INT016">
    <xsl:output method="text" encoding="Windows-1252"/>
    <xsl:variable name="linefeed" select="'&#xa;'"/>
    <xsl:variable name="separator" select='","'/>

    <xsl:template match="/">
        <!-- Header -->
        <xsl:text>EE ID,EE Supp Life In-force Amount,EE Supp Life Total Applied,EE Supp Life Event,Spouse Life In-force Amount,Spouse Life Total Applied,Spouse Life Event</xsl:text>
        <xsl:value-of select="$linefeed"/>
        <xsl:for-each-group select="/wd:Report_Data/wd:Report_Entry"
            group-by="wd:WORKER_GROUP/wd:W_Employee_ID">
            <xsl:value-of select="wd:WORKER_GROUP/wd:W_Employee_ID"/>
            <xsl:value-of select="$separator"/>
            <xsl:for-each select="current-group()">
                <xsl:choose>
                    <xsl:when test="wd:EOI_BPLAN/wd:ID[@wd:type = 'Insurance_Coverage_Plan_ID'] = 'Supplemental Life - Symetra (Employee)'">
                        <xsl:value-of select="wd:AMOUNT_APPLIED/@wd:Descriptor[/wd:EOI_BPLAN/wd:ID[@wd:type = 'Insurance_Coverage_Plan_ID'] = 'Supplemental Life - Symetra (Employee)']"/>
                    </xsl:when>
                    <xsl:when test="wd:EOI_BPLAN/wd:ID[@wd:type = 'Insurance_Coverage_Plan_ID'] = 'Spouse Life - Symetra (Spouse/Domestic Partner)'">
                        <xsl:value-of select="wd:AMOUNT_APPLIED/wd:ID[@wd:type = 'Currency_Coverage_Master_Amount_ID']"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="'VALIDATE'"/>
                    </xsl:otherwise>
                </xsl:choose>
                <xsl:value-of select="$separator"/>
            </xsl:for-each>
            <xsl:value-of select="$linefeed"/>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

Ожидаемый результат:

EE ID,EE Supp Life In-force Amount,EE Supp Life Total Applied,EE Supp Life Event,Spouse Life In-force Amount,Spouse Life Total Applied, Spouse Life Event                           
11464,,220000,Marital_Status_-_Marriage,,,
11226,140000,750000,Employee_or_Dependent_Gains/Loses_Other_Coverage,,250000,Employee_or_Dependent_Gains/Loses_Other_Coverage                               

Фактический результат:

11464,,

11226,,250000,

Две глобальные переменные:

  • имя переменной = "linefeed" select = "''"
  • имя переменной = " разделитель "select = '", "
...