В XSLT 1.0 вы бы использовали мюнхенскую группировку.
Определите ключевой «формат», из которого мы можем легко выбрать все элементы с заданным именем формата. Чем применить мюнхенскую группировку для поиска уникальных форматов во входных данных.
Тогда все становится просто. Шаблон «*» будет применен один раз для каждого формата и использует ключ () для извлечения всех записей для этого формата.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="format" match="TestNode/*" use="@format" />
<xsl:template match="TestNode">
<body>
<xsl:apply-templates select="*[generate-id(.)=generate-id(key('format',@format)[1])]"/>
</body>
</xsl:template>
<xsl:template match="*">
<format format="{@format}">
<xsl:copy-of select="key('format', @format)" />
</format>
</xsl:template>
</xsl:stylesheet>