I like using the ddwrt namespace functions, as they give you a lot of power in your DVWP’s XSL. I just found an alternative approach to using the ddwrt:NameChanged function which may make more sense in some situations. I included this approach in an update to my prior post, but it seemed worth a post of its own.
If you want to eliminate duplicates only with XSL, you can use the select below in your dvt_1.body template’s xsl:for-each, which is the clause which determines which rows to pass to the dvt_1.rowview template.
<xsl:template name="dvt_1.body"> <xsl:param name="Rows"/> <xsl:for-each select="$Rows[not(@Title = preceding-sibling::*/@Title)]"> <xsl:call-template name="dvt_1.rowview"/> </xsl:for-each> </xsl:template>