Этого можно добиться, используя метод Muenchian Grouping , метод группировки для XSLT-1.0.
В следующем примере кода он реализуется для сортировки дублетов:
<?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" omit-xml-declaration="yes" />
<xsl:key name="proto" match="DESIGN-FUNCTION-PROTOTYPE" use="TYPE-TREF" />
<xsl:template match="/">
<xsl:for-each select="//DESIGN-FUNCTION-PROTOTYPE[generate-id() = generate-id(key('proto',TYPE-TREF)[1])]">
<varoutput>
<xsl:value-of select="TYPE-TREF"/>
</varoutput>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Его вывод:
<varoutput>ABC</varoutput>
<varoutput>XYZ</varoutput>
Ответ на ваш теперь другой вопрос, реализующий ту же технику, может быть
<?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" omit-xml-declaration="yes" />
<xsl:key name="proto" match="DESIGN-FUNCTION-PROTOTYPE" use="substring-after(substring-after(TYPE-TREF,'/'),'/')" />
<xsl:template match="/">
<xsl:for-each select="//DESIGN-FUNCTION-PROTOTYPE[generate-id() = generate-id(key('proto',substring-after(substring-after(TYPE-TREF,'/'),'/'))[1])]">
<xsl:value-of select="substring-after(substring-after(TYPE-TREF,'/'),'/')"/><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Его вывод:
123
456
Обратите внимание, что существенное изменение вопроса после подходящего ответа осуждается правилами SO.Не делайте этого снова.