Michael: XSLT - Sortieren und doppelte Einträge unterdrücken

Beitrag lesen

Hallo,

IIRC kann das so sowieso nicht funktionieren, denn position() bezieht sich auf die Position im Dokument, nicht im (sortierten) Ergebnis.
;-)

(was heißt eigentlich IIRC?)
???
bei mir funktioniert es aber:
Hier mal das Template:
<xsl:template match="litlist">
 <ul>
  <xsl:for-each select=".//li">
   <xsl:sort select="." />
    <xsl:variable name="position"><xsl:value-of select="position() mod 2"></xsl:value-of> </xsl:variable>
    <li>
     <xsl:attribute name="class">
      xsl:choose
       <xsl:when test="$position = 1">xsl:textlitli</xsl:text>
       </xsl:when>
       <xsl:when test="$position = 0">xsl:textlitli2</xsl:text>
       </xsl:when>
      </xsl:choose>
     </xsl:attribute>
     <xsl:call-template name="ankersetzen"></xsl:call-template>
     <xsl:value-of select="."></xsl:value-of>
    </li>
   </xsl:for-each>
 </ul>
</xsl:template>

Ergebnis: Ausgabe ist sortiert und jedes zweite li hat eine andere class. (Einen Zufall kann ich 100%ig ausschließen, da die Liste zum einen schon ziemlich lang ist und ich zum anderen mal zwei Knoten im XML vertauscht habe)

Wie kann das sein? - bezieht sich position() nach sort nicht doch auf das sortierte Knotenset???
 »» Wie es zu lösen ist, weiß ich im Moment aber auch nicht.
Hätte sich ja dann erledigt, wenn es so sein sollte wie oben ich probier mal die Methode, die ich erst nehmen wollte und schreib mal obs funzt.

PS: Hätte noch ne kleine Zusatzfrage, da kniffle ich auch grad dran rum, ohne auf die Lösung zu kommen.
In einem XML das linear aufgebaut ist, möchte ich den nächsten vorhergehenden Geschwisterknoten "überschrift" mit Attribut h=1 auswählen, hier ein kurzes Beispiel:
<überschrift h="1" />
<bla />
<überschrift h="1" />(der soll adressiert werden)
<bla />
<bla />
<überschrift h="2" />(von hier aus)
<bla />
...
<bla />
<überschrift h="2" />(oder von hier aus)
Wie adressiere ich denn den Knoten?
preceding-sibling::überschrift/@h1 Trifft bei mir nichts. Habe ich da einen Denkfehler? - falls das eigentlich funktionieren müsste check ich wahrscheinlich nicht, wo der Parser beim Aufruf gerade steht.

Vielen Dank und viele Grüße

Michael