Ok, so I have this XML data that I’m trying to alter. I have XSLT written but it’s not doing the trick and I need help figuring out what is wrong with it.
Here is my XML that I need to alter using XSLT:
<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.playdate.report/Absence_Balances-Outbound">
<bb:Report_Entry>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
</bb:All_Eligible_Time_Off_Plans_for_Worker>
<bb:projectedBalanceTotal.effectiveDate1>08122012</bb:projectedBalanceTotal.effectiveDate1>
<bb:projectedBalanceTotal.effectiveDate2>08262012</bb:projectedBalanceTotal.effectiveDate2>
<bb:projectedBalanceTotal.effectiveDate3>09092012</bb:projectedBalanceTotal.effectiveDate3>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</bb:Report_Entry>
</bb:Report_Data>
This is what I need it to look like:
<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.playdate.report/Absence_Balances-Outbound">
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
<projectedBalanceTotal>
<bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
<bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
<bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
<bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
<bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
<bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
</projectedBalanceTotal>
</bb:Report_Data>
This is the XSLT I am using that’s not doing the trick:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.playdate.report/Projected_Absence_Balances-Outbound">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<bb:Report_Data>
<xsl:apply-templates select="*/*/*/*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]"/>
</bb:Report_Data>
</xsl:template>
<xsl:template match="*">
<projectedBalanceTotal>
<xsl:copy-of select="
../../bb:projectedBalanceTotal.principalId |
../bb:projectedBalanceTotal.planCodeId |
../bb:projectedBalanceTotal.leaveDescription |
../bb:projected_balance_accrual_amount_for_the_pay_period" />
<bb:projectedBalanceTotal.effectiveDate>
<xsl:value-of select="." />
</bb:projectedBalanceTotal.effectiveDate>
<xsl:copy-of select="../../bb:projectedBalanceTotal.employeeId" />
</projectedBalanceTotal>
</xsl:template>
</xsl:stylesheet>
It would also be nice if I could remove the WD prefixes. Any help would be greatly appreciated!!!!
I think you probably first need to start off by matching bb:Report_Entry elements
Then, for each such entry, you try to match the effective dates
And then, within the template that matches the dates, you match bb:All_Eligible_Time_Off_Plans_for_Worker elements, but passing in the date as a parameter.
The template for bb:All_Eligible_Time_Off_Plans_for_Worker could then output the elements within in, along with the effective which was passed as a parameter.
Here is the full XSLT
When applied to your sample XML, the following is output
I wasn’t entirely sure if you actually wanted to change the namespace or not, so currently the XSLT keeps it the same.