this might not be complex to you all but it's extremely difficult for me. This is my second attempt. I have changed my data around to include more information that will take less to transform.
Basically I am trying to take data consisting of three vacation plans (VA, SS and WR) and project out the amount of time each plans will accrue each pay period, by worker, for an entire year. I've only included three pay periods in my data to keep it short(er). I need a separate record for each worker / effective date combination. So if a worker has three vacations plans, and are paid bi-weekly (26 times / year), then that worker could have 78 records.
Here is the XML I am starting with (remember, I am only using the first 3 pay period dates in my example and not all 26):
<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.workday.report/Projected_Balances_Outbound">
<bb:Report_Entry>
<bb:projectedBalanceTotal.principalId>1238974569</bb:projectedBalanceTotal.principalId>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</bb:Report_Entry>
<bb:Report_Entry>
<bb:projectedBalanceTotal.principalId>4545645878</bb:projectedBalanceTotal.principalId>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</bb:Report_Entry>
</bb:Report_Data>
This is what I need to the output to look like after the transformation:
<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.workday.report/Projected_Balances_Outbound">
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
</projectedBalanceTotal>
</bb:Report_Data>
A few more things to take notice of... In addition to the format changes, I am removing the element tags "All_Eligible_Time_Off_Plans_for_Worker" altogether and I am replacing "bb:Report_Entry" with "projectedBalanceTotal".
I have virtually no starting point except that I have XSL code written that successfully removes "All_Eligible_Time_Off_Plans_for_Worker" and replaces "bb:Report_Entry" with "projectedBalanceTotal". That can be found here:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/CR-INT486-Kuali_Trojan_Time-Absence_Balances__Hospital_Bi-Weekly_-Outbound"
exclude-result-prefixes="wd">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="comment()|processing-instruction()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="wd:All_Eligible_Time_Off_Plans_for_Worker">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="wd:Report_Data">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="wd:Report_Entry">
<projectedleaveBalanceTotal>
<xsl:apply-templates select="node()|@*"/>
</projectedleaveBalanceTotal>
</xsl:template>
</xsl:stylesheet>
Any help would be great! Thanks so much in advance.
Try this ...
Caveat
This outputs <bb:projectedBalanceTotal.effectiveDate\d> nodes, where "\d" means some integer. In your sample input, you have effectiveDate1, effectiveDate2 etc. However in your expected output have only effectiveDate1 . I didn't bother to rename all the effectiveDate\d nodes to effectiveDate1 because of the high probablity that this was just a clerical error on your part. So if you require all effectiveDate\d nodes to be called precisely effectiveDate1, then adjust accordingly.
Learning note
If you want to self-solve similar problems in future, try this technique:
Update
The OP has asked for a modification to the style-sheet so that the effectiveDate element is the output is without a number embedded in its local-name. So here are the changes...
Break the big xsl:copy-of into 3 parts. One before the dot (.), one for the dot (.), and one for after the dot (namely employeeid). So the before bit looks like this...
For the middle bit (in esse the xsl:copy-of select="."), we cant use a copy-of because we want to change the name. So we substitute a literal element like so ...
The 3rd and last bit is like the first but just for the employeeid element.
Putting it altogether, we get for our template ...