Hi,
Please find the 2 XML's
Input XML-
<feed xmlns:es="http://ucmservice">
<element>
<es:RepositoryDetails>
<es:Repository Type="DatabaseRepository" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">
<es:PropValues>
<es:PropValue>Gurgaon</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>15000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="DatabaseRepository" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index1</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">
<es:PropValues>
<es:PropValue>Delhi</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>15000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="Trim" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Quality</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">
<es:PropValues>
<es:PropValue>Mumbai</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>20000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="DatabaseRepository" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">
<es:PropValues>
<es:PropValue>Gurgaon</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>15000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="Trim" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index1</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">
<es:PropValues>
<es:PropValue>Gurgaon</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>20000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element></feed>
Required Output XML-
<tree>
<item level="0" name="15000">
<item level="1" name="Index">
<item level="2" name="Gurgaon"/>
<item level="2" name="Mumbai"/>
</item>
<item level="1" name="Index1">
<item level="2" name="Delhi"/>
</item>
</item>
<item level="0" name="20000">
<item level="1" name="Quality">
<item level="0" name="Mumbai"/>
<item level="1" name="Index1">
<item level="0" name="Gurgaon"/>
</item>
</item>
</tree>
I tried few things in XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns="http://filenet.com/namespaces/wcm/apps/1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:es="http://ucmservice" exclude-result-prefixes="es">
<xsl:key name="ByType" match="element" use=".//es:DocProperty[1]/es:PropValues/es:PropValue"/>
<xsl:key name="ByType-Name" match="es:UniqueDocId" use="es:DocProperty[2]/es:PropValues/es:PropValue"/>
<xsl:template match="text()"/>
<xsl:template match="feed">
<tree>
<xsl:apply-templates/>
</tree>
</xsl:template>
<xsl:template match="element"/>
<xsl:template match="element[count(.|key('ByType',.//es:DocProperty[1]/es:PropValues/es:PropValue)[1])=1]">
<item level="0" name="{es:DocProperties/es:UniqueDocId/es:DocProperty[1]/es:PropValues/es:PropValue}">
<xsl:apply-templates select="key('ByType',.//es:DocProperty[1]/es:PropValues/es:PropValue)/*"/>
</item>
</xsl:template>
<xsl:template match="es:UniqueDocId"/>
<xsl:template match="es:UniqueDocId[count(.|key('ByType-Name',es:DocProperty[2]/es:PropValues/es:PropValue)[1])=1]">
<xsl:if test="(es:DocProperty[1]/@propertyName)!='Error'">
<item level="1" name="{es:DocProperty[2]/es:PropValues/es:PropValue}">
<xsl:apply-templates select="key('ByType-Name',es:DocProperty[2]/es:PropValues/es:PropValue)/*"/>
</item>
</xsl:if>
</xsl:template>
<xsl:template match="es:DocProperty[3]">
<xsl:if test="(./@propertyName)!='Error'">
<item level="2" name="{./es:PropValues/es:PropValue}" />
<MigrationId>
<xsl:attribute name="Value"><xsl:value-of select="ancestor-or-self::element/es:RepositoryDetails/es:ConnetionDetails/es:Param/@MigrationSetId"/></xsl:attribute>
</MigrationId>
<DocId>
<xsl:attribute name="Value"><xsl:value-of select="parent::es:UniqueDocId/@Value"/></xsl:attribute>
</DocId>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Please advise where am i going wrong