首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为xslt中的特定结果编写硬代码和求和结果?

如何为xslt中的特定结果编写硬代码和求和结果?
EN

Stack Overflow用户
提问于 2020-12-02 21:48:43
回答 1查看 92关注 0票数 1

我有下面的XML和XSL。我希望为一个特定的ID生成一个特定的输出结果,但是数据进程的其余部分将保持正常。我不确定是否有语法来完成这个任务,任何帮助都是非常感谢的。谢谢!

因此,如果ID = 12345,那么将Contribution_desc硬编码为“工资扣减”,并将两个Report_Entry节点相加为contribution_Amount的一个输出。

其他人每个Report_Entry都会得到一个输出行。

因此,在12345的输出中,Contribution_desc =工资扣减和contribution_Amount = 50。

他只会有一个输出

56789仍然有两行输出。

XML输入

代码语言:javascript
复制
<wd:Report_Data xmlns:wd="urn:com.workday.report/ContributionData">
    <wd:Report_Entry>
        <wd:Worker><wd:ID>12345</wd:ID></wd:Worker>     
        <wd:Deduction_Description>Employer Contribution</wd:Deduction_Description>
        <wd:Current_Period_Result>25</wd:Current_Period_Result>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Worker><wd:ID>12345</wd:ID></wd:Worker> 
        <wd:Deduction_Description>Payroll Deduction</wd:Deduction_Description>
        <wd:Current_Period_Result>25</wd:Current_Period_Result>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Worker><wd:ID>56789</wd:ID></wd:Worker>
        <wd:Deduction_Description>Employer Contribution</wd:Deduction_Description>
        <wd:Current_Period_Result>41.66</wd:Current_Period_Result>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Worker><wd:ID>56789</wd:ID></wd:Worker>
        <wd:Deduction_Description>Payroll Deduction</wd:Deduction_Description>
        <wd:Current_Period_Result>48.33</wd:Current_Period_Result>
    </wd:Report_Entry>
</wd:Report_Data>

XSL样本

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:out="http://www.workday.com/integration/output" 
    xmlns:etv="urn:com.workday/etv" exclude-result-prefixes="xs" version="2.0"
    xmlns:xtt="urn:com.workday/xtt"
    xmlns:wd="urn:com.workday.report/ContributionData">
    
        
    <!--
    If ID = 12345 
    Hard code the Contribution_desc to be 'Payroll Deduction' 
    and
    Sum both Report_Entry nodes into one output for contribution_Amount
    Everyone else gets an output row per Report_Entry
    
    So in ouput for 12345
    Contribution_desc = Payroll Deduction
    contribution_Amount = 50
    And he would only have one output 
    
    56789 will still have two rows of output
    -->
        
    <xsl:template match="wd:Report_Data">        
        <File xtt:separator="&#xd;&#xa;">
            <xsl:for-each-group select="wd:Report_Entry" group-by="wd:Worker/wd:ID">
                <xsl:for-each-group select="current-group()" group-by="wd:Deduction_Description">
                <CT xtt:separator="|">
                    <ID><xsl:value-of select="wd:Worker/wd:ID"/></ID>
                    <Contribution_desc><xsl:value-of select="wd:Deduction_Description"/></Contribution_desc>
                    <contribution_Amount><xsl:value-of select="format-number(sum(current-group()//wd:Current_Period_Result),'#0.00')"/></contribution_Amount>
                </CT>
                </xsl:for-each-group>
            </xsl:for-each-group>            
        </File>
    </xsl:template>
</xsl:stylesheet>

以下是当前的输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<File xmlns:out="http://www.workday.com/integration/output" xmlns:etv="urn:com.workday/etv"
    xmlns:xtt="urn:com.workday/xtt" xmlns:wd="urn:com.workday.report/ContributionData"
    xtt:separator="&#xD;&#xA;">
    <CT xtt:separator="|">
        <ID>12345</ID>
        <Contribution_desc>Employer Contribution</Contribution_desc>
        <contribution_Amount>25.00</contribution_Amount>
    </CT>
    <CT xtt:separator="|">
        <ID>12345</ID>
        <Contribution_desc>Payroll Deduction</Contribution_desc>
        <contribution_Amount>25.00</contribution_Amount>
    </CT>
    <CT xtt:separator="|">
        <ID>56789</ID>
        <Contribution_desc>Employer Contribution</Contribution_desc>
        <contribution_Amount>41.66</contribution_Amount>
    </CT>
    <CT xtt:separator="|">
        <ID>56789</ID>
        <Contribution_desc>Payroll Deduction</Contribution_desc>
        <contribution_Amount>48.33</contribution_Amount>
    </CT>
</File>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 22:25:12

这听起来好像你只是想检查你的外部分组键。

代码语言:javascript
复制
        <xsl:for-each-group select="wd:Report_Entry" group-by="wd:Worker/wd:ID">
          <xsl:choose>
           <xsl:when test="current-grouping-key() = 12345">
            <CT xtt:separator="|">
                <ID><xsl:value-of select="current-grouping-key()"/></ID>
                <Contribution_desc>Payroll Deduction</Contribution_desc>
                <contribution_Amount><xsl:value-of select="format-number(sum(current-group()//wd:Current_Period_Result),'#0.00')"/></contribution_Amount>
            </CT>
           </xsl:when>
           <xsl:otherwise>
            <xsl:for-each-group select="current-group()" group-by="wd:Deduction_Description">
            <CT xtt:separator="|">
                <ID><xsl:value-of select="wd:Worker/wd:ID"/></ID>
                <Contribution_desc><xsl:value-of select="wd:Deduction_Description"/></Contribution_desc>
                <contribution_Amount><xsl:value-of select="format-number(sum(current-group()//wd:Current_Period_Result),'#0.00')"/></contribution_Amount>
            </CT>
            </xsl:for-each-group>
           </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each-group> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65116639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档