Ausgangspunkt ist eine XML-Liste wieListe sortieren und Dubletten in XSLT eliminieren?
<attributes>
<para role="tocmain1"/>
<para role="tocmain1"/>
<other style="fix"/>
<other style="fix"/>
<para role="tocmain2"/>
<para role="tocmain2"/>
<para role="tocmain2"/>
<para role="tocmain3"/>
<para role="tocmain3"/>
<para language="de"/>
<para language="de"/>
<para role="tocmain3"/>
</attributes>
Ich mag würde das Vorkommen jedes Elements + Attribut + Wert Instanz nur ein Vorkommen zu reduzieren.
So:
<attributes>
<other style="fix"/>
<para language="de"/>
<para role="tocmain1"/>
<para role="tocmain2"/>
<para role="tocmain3"/>
</attributes>`
Bisher habe ich nur gelungen, in alphabetischer Reihenfolge die Liste zu bestellen. Alle meine Versuche, die Liste zu reduzieren, waren bisher vergeblich.
Das ist, was ich jetzt haben:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<attributes>
<xsl:for-each select="attributes/node()">
<xsl:sort select="name()" order="ascending"/>
<xsl:sort select="@*" order="ascending"/>
<xsl:choose>
<xsl:when test="name() = name(preceding::*[1]) and self::node()/@* = preceding::*/@*"/>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</attributes>
</xsl:template>
</xsl:stylesheet>
Ich hätte explizit erwähnen sollen, dass die Liste in Elementen, Attributen und Werten unterschiedlich ist. Ich habe meine Liste auf diese Weise bearbeitet. Alle deine Versuche, die @role verwenden, werden nicht funktionieren. Deshalb habe ich versucht, */@ * zu verwenden. Ich muss Duplikate auf der Grundlage des gleichen Elements + des gleichen Attributs + des gleichen Wertes löschen. – rena