Hello Everyone
I need to remove duplicate nodes from below XML based on a condition. Can someone please help me fix the XSLT I have written? Or suggest a workaround?
My requirement: Remove entire nodes if below conditions are met.
- If employee id has duplicate entries
- If above condition is ‘true’, retain Worker node where in ‘Type’ is ‘Employee’. Other duplicate ‘worker’ node entry with same employee id will have ‘Type’ as ‘Contingent’.
<?xml version="1.0" encoding="UTF-8"?>
<Workers xmlns:xsi="http://ift.tt/ra1lAU">
<Header>
<File>22.0</File>
<Date>2014-05-31T16:20:07.000-07:00</Date>
<Worker_Count>2</Worker_Count>
</Header>
<Worker>
<Summary>
<Employee_ID>12345800</Employee_ID>
<Name>John Davis (12345800)</Name>
<Type>Employee</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>12345800</Employee_ID>
<Name>John Davis (12345800)</Name>
<Type>Contingent</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>32451854</Employee_ID>
<Name>Felix (32451854)</Name>
<Type>Employee</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>23471732</Employee_ID>
<Name>David (23471732)</Name>
<Type>Contingent</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>38741297</Employee_ID>
<Name>Sam Daniel (38741297)</Name>
<Type>Employee</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>38741297</Employee_ID>
<Name>Sam Daniel (38741297)</Name>
<Type>Contingent</Type>
</Summary>
</Worker>
</Workers>
Above XML need be transformed as below.
<?xml version="1.0" encoding="UTF-8"?>
<Workers xmlns:xsi="http://ift.tt/ra1lAU">
<Header>
<File>22.0</File>
<Date>2014-05-31T16:20:07.000-07:00</Date>
<Worker_Count>2</Worker_Count>
</Header>
<Worker>
<Summary>
<Employee_ID>12345800</Employee_ID>
<Name>John Davis (12345800)</Name>
<Type>Employee</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>32451854</Employee_ID>
<Name>Felix (32451854)</Name>
<Type>Employee</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>23471732</Employee_ID>
<Name>David (23471732)</Name>
<Type>Contingent</Type>
</Summary>
</Worker>
<Worker>
<Summary>
<Employee_ID>38741297</Employee_ID>
<Name>Sam Daniel (38741297)</Name>
<Type>Employee</Type>
</Summary>
</Worker>
</Workers>
I have written below XSLT. Not sure how to add conditions in below XSLT to remove nodes contain duplicate employee id where in type is ‘Contingent’
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://ift.tt/tCZ8VR" xmlns:ws="urn:com.workday/workersync">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Workers/Worker[Summary/Type='Contingent']"/>
</xsl:stylesheet>
Above XSLT removes all Type which has value as ‘Contingent’. But, what I need is remove nodes which has Type as Contingent only when ‘Employee id’ has duplicate entries in the XML?
Request your help. Thanks Anoop
No comments:
Post a Comment