Это вопрос группировки , а в XSLT 1.0 наиболее эффективным способом группировки является метод Мюнхена.
Если количество элементов не слишком велико, может быть достаточно следующего короткого кода :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*/*">
<xsl:copy-of select=
"self::*[not(preceding-sibling::*
[name() = name(current())]
)
]"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему исходному XML-документу :
<t>
<node />
<anothernode />
<node />
<anothernode />
<unknown />
<anothernode />
<node />
<unknown />
</t>
Требуемый результат получен :
<node/>
<anothernode/>
<unknown/>
Можно изучить выражения XPath, используемые для того, чтобы понять, что это преобразование действительно копирует каждое первое вхождение элемента с определенным именем.