我有下面的XML和XSL。我希望为一个特定的ID生成一个特定的输出结果,但是数据进程的其余部分将保持正常。我不确定是否有语法来完成这个任务,任何帮助都是非常感谢的。谢谢!
因此,如果ID = 12345,那么将Contribution_desc硬编码为“工资扣减”,并将两个Report_Entry节点相加为contribution_Amount的一个输出。
其他人每个Report_Entry都会得到一个输出行。
因此,在12345的输出中,Contribution_desc =工资扣减和contribution_Amount = 50。
他只会有一个输出
56789仍然有两行输出。
XML输入
<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样本
<?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="
">
<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>以下是当前的输出:
<?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="
">
<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>发布于 2020-12-02 22:25:12
这听起来好像你只是想检查你的外部分组键。
<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> https://stackoverflow.com/questions/65116639
复制相似问题