Thomas J.S.: XSLT - Sortieren und doppelte Einträge unterdrücken

Beitrag lesen

Hallo,

danke für die Mühe die Du Dir mit mir gibst. Dein Beispiel hat geholfen und ich glaube ich habe es jetzt wirklich kapiert.

Gerne ;-)

Allerdings habe ich mein Problem (doppelte Einträge aussortieren und im sortierten Ergebnis jedes zweite Element farblich abheben) trotzdem noch nicht lösen können.

<xsl:variable name="this" value="."/>
(Bei der Variable meintest Du statt value schon select?

Ja, war nur ein Fehler den ich hier gemacht habe.

.......................
XSLT (in der Version, in der zwar sortiert und aussortiert wird, aber wo eben das farblich hinterlegen jedes zweiten Listenelements nicht klappt)
.......................

Wenn du die Position ausgibst bekommst du folgendes:
<li class="litli2">1) Hegner</li>
<li class="litli">2) Rosenfeld</li>
<li class="litli">4) Rosson</li>
<li class="litli2">5) Scriven</li>
<li class="litli">6) Thimbleby</li>

Dann wird auch klar warum das nicht klapp: erst findet die Sortierung statt, dann kommt die Einschränkung, welche dann keine Auswirkungen auf die Sortierung hat.

Ich habe das jetzt ganz anders gelöst:
----------------
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="likey" match="li" use="." />
...
<xsl:template match="litlist/ul">
 <ul>
  <xsl:for-each select="li[generate-id(.) = generate-id(key('likey', .)[1])]">
   <xsl:sort />
    <li>
     <xsl:attribute name="class">
      <xsl:if test="position() mod 2 = 0">xsl:textlitli</xsl:text></xsl:if>
      <xsl:if test="position() mod 2 = 1">xsl:textlitli2</xsl:text></xsl:if>
     </xsl:attribute>
     <!-- <xsl:call-template name="ankersetzen"></xsl:call-template> -->
     <!-- <xsl:apply-templates /> -->
  <xsl:value-of select="substring-before(., ',')" />
    </li>
 </xsl:for-each>
 </ul>
</xsl:template>
...
-------------------

Ergebnis:
<li class="litli2">Hegner</li>
<li class="litli">Rosenfeld</li>
<li class="litli2">Rosson</li>
<li class="litli">Scriven</li>
<li class="litli2">Thimbleby</li>
</ul>

Im Prinzip gruppiere ich jetzt die Elemente und vergliche dann immer das erste aus der Gruppe mit dem aktuellen, so werden Duplikate nicht mehr in die Sortierung hineingenommen.
(Falls dich interessiert: wenn du nach "gernerate-id(key" und nach meinem Namen im Archiv suchst, findest du die lange Erklärung)

Grüße
Thomas