XSLT-преобразование для XML в текст, дающее пустой файл. - PullRequest
0 голосов
/ 16 октября 2018

Я ищу вывод ниже для моего преобразования xslt.когда я запускаю преобразование, оно не генерирует данные и не выдает ошибку.Любая помощь будет принята с благодарностью.Я хочу напечатать H current_eefectivedate и 090618 CREDIT UNION SSA DEPOST.Затем для каждой записи D 06 current_eefectivedate 091 deduction_amount с последующим трейлером.

H 090618 CREDIT UNION SSA DEPOST
D 06 1083231 091 0001200            
D 06 1142308 091 0001200            
D 06 1174967 091 0002000            
D 06 1251417 091 0002000            
T 00004 000006400

Трейлер печатает количество записей и суммирует вычеты (последние 7 символов).


XML-файл:

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

<wd:Report_Data xmlns:wd="urn:com.workday.report/INT063_RPT_SSA_Deductions_Outbound">
<wd:Report_Entry>
        <wd:Worker wd:Descriptor="******">
            <wd:ID wd:type="WID">265c773ade2d0177442bf7738d366e62</wd:ID>
            <wd:ID wd:type="Employee_ID">*****</wd:ID>
        </wd:Worker>
        <wd:Team_Member_ID>1190969</wd:Team_Member_ID>
        <wd:CFI_TC_INT006_Global_H>H</wd:CFI_TC_INT006_Global_H>
        <wd:Current_Effective_Date>240918</wd:Current_Effective_Date>
        <wd:CFI_TC_Global_T>T</wd:CFI_TC_Global_T>
        <wd:Related_Calculations>
            <wd:CFI_INT036_Bank_Acc_Number_Extract>25</wd:CFI_INT036_Bank_Acc_Number_Extract>
        </wd:Related_Calculations>
        <wd:Worker>
            <wd:CF_TC_Credit_Union_Pay_Deduct>CREDIT UNION SSA DEPOST</wd:CF_TC_Credit_Union_Pay_Deduct>
            <wd:CFI_TC_INT006_Global_D>D</wd:CFI_TC_INT006_Global_D>
            <wd:TC_06_INT063>06</wd:TC_06_INT063>
            <wd:TC_009_INT063>009</wd:TC_009_INT063>
            <wd:CF_Text_Constant_0>0</wd:CF_Text_Constant_0>
            <wd:CF_Text_Constant_CCD>CCD</wd:CF_Text_Constant_CCD>
        </wd:Worker>
        <wd:Deduction_Amount>25</wd:Deduction_Amount>
        <wd:CFI_EE_INT010_Payroll_Result_Line_Source_type>181011</wd:CFI_EE_INT010_Payroll_Result_Line_Source_type>
    </wd:Report_Entry>
</wd:Report_Data>


------------------------

Мой XSLT:

<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:etv="urn:com.workday/etv" 
    xmlns:functx="http://www.functx.com"
    xmlns:wd="urn:com.workday.report/INT063_RPT_SSA_Deductions_Outbound" xmlns:xtt="urn:com.workday/xtt">

    <xsl:output method="text" indent="yes"/>
    <xsl:variable name="linefeed" select="'&#xD;&#xA;'"></xsl:variable>
    <xsl:decimal-format decimal-separator="," grouping-separator="."/>
    <xsl:template match="wd:Report_Data">

                <xsl:value-of select="wd:Report_Entry[1]/wd:CFI_TC_INT006_Global_H"/>

                <xsl:value-of select="wd:Report_Entry[1]/wd:Current_Effective_Date"/>

                <xsl:value-of select="wd:Report_Entry[1]/wd:Worker/wd:CF_TC_Credit_Union_Pay_Deduct"/>

            <xsl:value-of select="$linefeed"/>

        <xsl:for-each-group select="wd:Report_Entry" group-by="wd:Worker/wd:ID[@wd:type='Employee_ID']">       

              <xsl:for-each select="current-grouping-key()">
                <Record1 etv:incrementNumber="rNumber">
                <xsl:variable name="VAR1" select="sum(current-group()/wd:Deduction_Amount)"/>
                <xsl:if test="$VAR1 &gt;0">
                    <ConstantD>
                        <xsl:value-of select="current-group()[1]/wd:Worker/wd:CFI_TC_INT006_Global_D"/>
                    </ConstantD>
                   <Current_Effective_Date>                   
                        <xsl:value-of select="current-group()[1]/wd:Current_Effective_Date"/>           
                    </Current_Effective_Date>
                    <Constant06>
                        <xsl:value-of select="current-group()[1]/wd:Worker/wd:TC_06_INT063"/>
                    </Constant06>
                    <Constant009>
                        <xsl:value-of select="current-group()[1]/wd:Worker/wd:TC_009_INT063"/>
                    </Constant009>

                    <Constant0>
                        <xsl:value-of select="current-group()[1]/wd:Worker/wd:CF_Text_Constant_0"/>
                    </Constant0>
                    <AccountNumber>                   
                        <xsl:value-of select="format-number(current-group()[1]/wd:Related_Calculations/wd:CFI_INT036_Bank_Acc_Number_Extract,'00000000')"> </xsl:value-of>          
                    </AccountNumber>
                    <CheckingCode>                   
                        <xsl:value-of select="current-group()[1]/wd:Worker/CF_Text_Constant_CCD"> </xsl:value-of>          
                    </CheckingCode>
                    <Amount etv:addNumber="amountSum" xtt:fixedLength="7" xtt:paddingCharacter="0">
                        <xsl:value-of select="format-number(current-group()[1]/wd:Deduction_Amount*100,'0000000')"/>
                    </Amount>

                    <xsl:value-of select="'          '"/>

                    <xsl:value-of select="$linefeed"/>
                </xsl:if>
                </Record1>
            </xsl:for-each>
        </xsl:for-each-group>

                <xsl:value-of select="wd:Report_Entry[1]/wd:CFI_TC_Global_T"/>
                <count etv:number="rNumber"/>     
                <xsl:value-of select="format-number(count(wd:Report_Entry),'00000')"/>
                <xsl:value-of select="format-number((sum(wd:Report_Entry/wd:Deduction_Amount)*100),'000000000')"/>
                <xsl:value-of select="'               '"/>   
                <xsl:value-of select="$linefeed"/>
    </xsl:template>
</xsl:stylesheet>

1 Ответ

0 голосов
/ 16 октября 2018

Вы хотите получить результат text, как указано вашим элементом <xsl:output method="text"...>.Поэтому я удалил некоторые из ваших элементов результата, потому что они были лишними.

Остался следующий шаблон с введением данных элемента wd:Report_Data и итерацией по всем элементам wd:Report_Entry.

<xsl:template match="wd:Report_Data">
    <xsl:value-of select="concat(wd:Report_Entry[1]/wd:CFI_TC_INT006_Global_H,' ',
    wd:Report_Entry[1]/wd:Current_Effective_Date,' ',wd:Report_Entry[1]/wd:Worker/wd:CF_TC_Credit_Union_Pay_Deduct,$linefeed)"/>

    <xsl:for-each-group select="wd:Report_Entry" group-by="wd:Worker/wd:ID[@wd:type='Employee_ID']">       
          <xsl:for-each select="current-grouping-key()">
            <xsl:variable name="VAR1" select="sum(current-group()/wd:Deduction_Amount)" />
            <xsl:if test="$VAR1 > 0">
                <xsl:value-of select="current-group()[1]/wd:Worker/wd:CFI_TC_INT006_Global_D" />
                <xsl:text> </xsl:text>
                <xsl:value-of select="current-group()[1]/wd:Worker/wd:TC_06_INT063"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="current-group()[1]/wd:Current_Effective_Date"/>           
                <xsl:text> </xsl:text>
                <xsl:value-of select="current-group()[1]/wd:Worker/wd:TC_009_INT063"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="current-group()[1]/wd:Worker/wd:CF_Text_Constant_0"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="format-number(current-group()[1]/wd:Related_Calculations/wd:CFI_INT036_Bank_Acc_Number_Extract,'00000000')"> </xsl:value-of>          
                <xsl:text> </xsl:text>
                <xsl:value-of select="current-group()[1]/wd:Worker/CF_Text_Constant_CCD"> </xsl:value-of>          
                <xsl:text> </xsl:text>
                <xsl:value-of select="format-number(current-group()[1]/wd:Deduction_Amount*100,'0000000')"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="'          '"/>
                <xsl:value-of select="$linefeed"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:for-each-group>

    <xsl:value-of select="wd:Report_Entry[1]/wd:CFI_TC_Global_T"/>
    <xsl:text> </xsl:text>
    <count etv:number="rNumber"/>     
    <xsl:value-of select="format-number(count(wd:Report_Entry),'00000')"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="format-number((sum(wd:Report_Entry/wd:Deduction_Amount)*100),'000000000')"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="'               '"/>   
    <xsl:text> </xsl:text>
    <xsl:value-of select="$linefeed"/>
</xsl:template>

Его результат примерно такой.Поскольку ваш XML неполон, я добавил еще один wd:Report_Entry с аналогичными значениями.Таким образом, этот результат состоит из двух wd:Report_Entry записей.Следовательно, результат отличается от вашего примера, но формат соответствует желаемому.

H 240918 CREDIT UNION SSA DEPOST
D 06 240918 009 0 00000025  0002500           
D 06 240918 009 0 00000025  0003000           
T 00002 000005500
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...