not operator
File: Data.xml <sample> <line lid="u1">hello</line> <line color="red" lid="u2">hello</line> <line color="blue" lid="u3">hello</line> <line lid="u4">hello there</line> <line color="blue" lid="u5">hello there</line> <line color="blue" lid="u6">hello</line> </sample> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" omit-xml-declaration="yes" /> <xsl:template match="line"> <xsl:if test="not(. = preceding::line)"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:if> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> </xsl:stylesheet> Output: <sample> <line lid="u1">hello</line> <line lid="u4">hello there</line> </sample>