This is for removing duplicate elements based on a criteria in a XML document.
E.X:
We have a below XML element structure. We need to Purchase Orders with unique ItemId.
PurchaseOrder:
OrderId
OrderedQty
OrderedUOM
Amount
Status
OrderedDate
Item
ItemName
ItemDescription
ItemId
Transformation file:
<xsl:template match="/">
<xsl:variable name="poVar" select="/ns1:PurchaseOrders/ns1:PurchaseOrder"/>
<ns1:PurchaseOrders>
<xsl:for-each select="$poVar">
<xsl:if test="generate-id() = generate-id($poVar[ns1:Item/ns1:ItemId = current()/ns1:Item/ns1:ItemId][1])">
<ns1:PurchaseOrder>
<ns1:OrderId>
<xsl:value-of select="ns1:OrderId"/>
</ns1:OrderId>
<ns1:OrderedQty>
<xsl:value-of select="ns1:OrderedQty"/>
</ns1:OrderedQty>
<ns1:OrderedUOM>
<xsl:value-of select="ns1:OrderedUOM"/>
</ns1:OrderedUOM>
<ns1:Amount>
<xsl:value-of select="ns1:Amount"/>
</ns1:Amount>
<ns1:Status>
<xsl:value-of select="ns1:Status"/>
</ns1:Status>
<ns1:OrderedDate>
<xsl:value-of select="ns1:OrderedDate"/>
</ns1:OrderedDate>
<ns1:Item>
<ns1:ItemName>
<xsl:value-of select="ns1:Item/ns1:ItemName"/>
</ns1:ItemName>
<ns1:ItemDescription>
<xsl:value-of select="ns1:Item/ns1:ItemDescription"/>
</ns1:ItemDescription>
<ns1:ItemId>
<xsl:value-of select="ns1:Item/ns1:ItemId"/>
</ns1:ItemId>
</ns1:Item>
</ns1:PurchaseOrder>
</xsl:if>
</xsl:for-each>
</ns1:PurchaseOrders>
Please find the complete project here.
E.X:
We have a below XML element structure. We need to Purchase Orders with unique ItemId.
PurchaseOrder:
OrderId
OrderedQty
OrderedUOM
Amount
Status
OrderedDate
Item
ItemName
ItemDescription
ItemId
Transformation file:
<xsl:template match="/">
<xsl:variable name="poVar" select="/ns1:PurchaseOrders/ns1:PurchaseOrder"/>
<ns1:PurchaseOrders>
<xsl:for-each select="$poVar">
<xsl:if test="generate-id() = generate-id($poVar[ns1:Item/ns1:ItemId = current()/ns1:Item/ns1:ItemId][1])">
<ns1:PurchaseOrder>
<ns1:OrderId>
<xsl:value-of select="ns1:OrderId"/>
</ns1:OrderId>
<ns1:OrderedQty>
<xsl:value-of select="ns1:OrderedQty"/>
</ns1:OrderedQty>
<ns1:OrderedUOM>
<xsl:value-of select="ns1:OrderedUOM"/>
</ns1:OrderedUOM>
<ns1:Amount>
<xsl:value-of select="ns1:Amount"/>
</ns1:Amount>
<ns1:Status>
<xsl:value-of select="ns1:Status"/>
</ns1:Status>
<ns1:OrderedDate>
<xsl:value-of select="ns1:OrderedDate"/>
</ns1:OrderedDate>
<ns1:Item>
<ns1:ItemName>
<xsl:value-of select="ns1:Item/ns1:ItemName"/>
</ns1:ItemName>
<ns1:ItemDescription>
<xsl:value-of select="ns1:Item/ns1:ItemDescription"/>
</ns1:ItemDescription>
<ns1:ItemId>
<xsl:value-of select="ns1:Item/ns1:ItemId"/>
</ns1:ItemId>
</ns1:Item>
</ns1:PurchaseOrder>
</xsl:if>
</xsl:for-each>
</ns1:PurchaseOrders>
Please find the complete project here.