My Input
<FinInstrmRptgTxRpt>
<Tx><New><TxId>61810</TxId><ExctgPty>ABC</ExctgPty></New></Tx>
<Tx><New><TxId>618101</TxId><ExctgPty>ABC</ExctgPty></New></Tx>
<Tx><New><TxId>61810</TxId><ExctgPty>ABX</ExctgPty></New></Tx>
<Tx><New><TxId>618102</TxId><ExctgPty>XYZ</ExctgPty></New></Tx>
<Tx><New><TxId>618102</TxId><ExctgPty>XYZ</ExctgPty></New></Tx>
<Tx><New><TxId>61810</TxId><ExctgPty>XYZ</ExctgPty></New></Tx>
</FinInstrmRptgTxRpt>
Output should look like
<FinInstrmRptgTxRpt>
<Tx><New><TxId>618101</TxId><ExctgPty>ABC</ExctgPty></New></Tx>
<Tx><New><TxId>618102</TxId><ExctgPty>XYZ</ExctgPty></New></Tx>
<Tx><New><TxId>61810</TxId><ExctgPty>XYZ</ExctgPty></New></Tx>
</FinInstrmRptgTxRpt>
In short I would like to remove duplicates from the xml based on TxId and keep the last line of the duplicate occurrence in the data.
I tried using below code but some reason duplicates (like in Python dataframe keep last)are not removed from the output.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="TxIdKeyList" match="Tx" use="TxId"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"Tx[ not( generate-id(current())
=
generate-id(
key('TxIdKeyList', 'TxId')[last()])
)
]"/>
</xsl:stylesheet>