Это часто задаваемые вопросы. Смотри http://www.jenitennison.com/xslt/grouping/muenchian.html
Этот XSLT-код:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:key name="criteria" match="/Nodes/Node" use="@att"/>
<xsl:template match="Nodes">
<xsl:copy>
<xsl:apply-templates select="Node[generate-id() = generate-id(key('criteria', @att))]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Node">
<xsl:copy-of select="."/> <!-- Or other actions -->
</xsl:template>
</xsl:stylesheet>
Обеспечит желаемый (если я правильно понял) вывод:
<?xml version="1.0" encoding="UTF-8"?>
<Nodes>
<Node att="1">A</Node>
<Node att="2">C</Node>
<Node att="3">E</Node>
</Nodes>
Это также будет работать с вводом, например:
<Nodes>
<Node att="someRandomString">A</Node>
<Node att="1aeawe">B</Node>
<Node att="someRandomString">C</Node>
<Node att="sfdf">D</Node>
<Node att="">E</Node>
<Node att="sfdf">F</Node>
</Nodes>
Вывод будет:
<?xml version="1.0" encoding="UTF-8"?>
<Nodes>
<Node att="someRandomString">A</Node>
<Node att="1aeawe">B</Node>
<Node att="sfdf">D</Node>
<Node att="">E</Node>
</Nodes>