Is there a simple stylesheet that will transform the flat data shown
below into the hierarchical form that is at the end of this email? I
hate to ask for your help but I'm stumped at the moment. EmployeeGroup
elements, while presented in a flat form in the initial XML output need
to be nested based on their EmployeeGroupTree child element's SK
attribute and their Parent child element's SK attribute (or xsi:nil
attribute). Each level in the hierarchy can have zero or more child
EmployeeGroup elements. The root of each tree is the EmployeeGroup with
a <Parent xsi:nil="true"/> child.
<!-- Original XML with flat structure -->
<EmployeeGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EmployeeGroup SK="1">
<EmployeeGroupTree SK="1"/>
<Code>AB_GP1</Code>
<Parent xsi:nil="true"/>
</EmployeeGroup>
<EmployeeGroup SK="2">
<EmployeeGroupTree SK="2"/>
<Code>AB_GP2</Code>
<Parent xsi:nil="true"/>
</EmployeeGroup>
<EmployeeGroup SK="3">
<EmployeeGroupTree SK="1"/>
<Code>AB1_G1</Code>
<Parent SK="1"/>
</EmployeeGroup>
<EmployeeGroup SK="4">
<EmployeeGroupTree SK="2"/>
<Code>AB2_G1</Code>
<Parent SK="2"/>
</EmployeeGroup>
<EmployeeGroup SK="5">
<EmployeeGroupTree SK="3"/>
<Code>CATGRY</Code>
<Parent xsi:nil="true"/>
</EmployeeGroup>
<EmployeeGroup SK="6">
<EmployeeGroupTree SK="4"/>
<Code>CSV </Code>
<Parent xsi:nil="true"/>
</EmployeeGroup>
<EmployeeGroup SK="7">
<EmployeeGroupTree SK="5"/>
<Code>HEAP </Code>
<Parent xsi:nil="true"/>
</EmployeeGroup>
<EmployeeGroup SK="8">
<EmployeeGroupTree SK="5"/>
<Code>H1 </Code>
<Parent SK="7"/>
</EmployeeGroup>
<EmployeeGroup SK="9">
<EmployeeGroupTree SK="5"/>
<Code>H10 </Code>
<Parent SK="7"/>
</EmployeeGroup>
<EmployeeGroup SK="10">
<EmployeeGroupTree SK="5"/>
<Code>H11 </Code>
<Parent SK="7"/>
</EmployeeGroup>
<EmployeeGroup SK="11">
<EmployeeGroupTree SK="5"/>
<Code>H12 </Code>
<Parent SK="7"/>
</EmployeeGroup>
<EmployeeGroup SK="12">
<EmployeeGroupTree SK="5"/>
<Code>H13 </Code>
<Parent SK="7"/>
</EmployeeGroup>
<EmployeeGroup SK="13">
<EmployeeGroupTree SK="1"/>
<Code>TEST </Code>
<Parent SK="3"/>
</EmployeeGroup>
<EmployeeGroup SK="14">
<EmployeeGroupTree SK="1"/>
<Code>TEST2 </Code>
<Parent SK="13"/>
</EmployeeGroup>
</EmployeeGroups>
<!-- desired hierarchical output of XSL transformation -->
<EmployeeGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EmployeeGroup SK="1">
<EmployeeGroupTree SK="1"/>
<Code>AB_GP1</Code>
<EmployeeGroup SK="3">
<EmployeeGroupTree SK="1"/>
<Code>AB1_G1</Code>
<EmployeeGroup SK="13">
<EmployeeGroupTree SK="1"/>
<Code>TEST </Code>
<EmployeeGroup SK="14">
<EmployeeGroupTree SK="1"/>
<Code>TEST2 </Code>
</EmployeeGroup>
</EmployeeGroup>
</EmployeeGroup>
</EmployeeGroup>
<EmployeeGroup SK="2">
<EmployeeGroupTree SK="2"/>
<Code>AB_GP2</Code>
<EmployeeGroup SK="4">
<EmployeeGroupTree SK="2"/>
<Code>AB2_G1</Code>
</EmployeeGroup>
</EmployeeGroup>
<EmployeeGroup SK="5">
<EmployeeGroupTree SK="3"/>
<Code>CATGRY</Code>
</EmployeeGroup>
<EmployeeGroup SK="6">
<EmployeeGroupTree SK="4"/>
<Code>CSV </Code>
</EmployeeGroup>
<EmployeeGroup SK="7">
<EmployeeGroupTree SK="5"/>
<Code>HEAP </Code>
<EmployeeGroup SK="8">
<EmployeeGroupTree SK="5"/>
<Code>H1 </Code>
</EmployeeGroup>
<EmployeeGroup SK="9">
<EmployeeGroupTree SK="5"/>
<Code>H10 </Code>
</EmployeeGroup>
<EmployeeGroup SK="10">
<EmployeeGroupTree SK="5"/>
<Code>H11 </Code>
</EmployeeGroup>
<EmployeeGroup SK="11">
<EmployeeGroupTree SK="5"/>
<Code>H12 </Code>
</EmployeeGroup>
<EmployeeGroup SK="12">
<EmployeeGroupTree SK="5"/>
<Code>H13 </Code>
</EmployeeGroup>
</EmployeeGroup>
</EmployeeGroups>