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

Beitrag lesen

Hallo,

<xsl:variable name="position"><xsl:value-of select="position() mod 2"></xsl:value-of> </xsl:variable>

variable select="position() mod 2" name="position"

Das würde in dem Template, wie ich es gepostet habe doch nicht funktionieren, da ich nicht gegen ein Ergebnisbaumfragment prüfe, sondern gegen den Wert.(?)
Hier verstehe ich aber auch  nicht genau, worauf Du hinaus willst.(?)
(Beziehst Du Dich damit auf mein gepostetes Template? Oder auf Deinen Lösungsvorschlag aus Deiner ersten Antwort auf meine ursprüngliche Frage?) (PS: Den auszuprobieren hänge ich noch darüber. Habe da noch ein Problem mit dem aufgrufenen Template "ankersetzen".)

Wie kann das sein? - bezieht sich position() nach sort nicht doch auf das sortierte Knotenset???

Nein, das ist schon OK so. Denn mit for-each selektierst du eine Knotenmenge, alle weitere Angaben in diesem Template (ja, auch for-ech ist ein Template, aber das soll uns jetzt nicht kümmern) gelten für diese Knotenmenge. So wird es immer noch nach position() im Dokument gearbeitet, aber mit der Einschrenkung, dass dabei nur diese Knotenmenge beachtet wird. Deshalb funktioniert es auch, wenn du Knoten vertauschst.

Das will mir immer noch nicht ganz eingehen.
Nochmal ein Beispiel:

<bsp>B</bsp> (pos 1)
<bsp>A</bsp> (pos 2)
<bsp>C</bsp> (pos 3)
...
<xsl:sort />
...
Knoten sortiert aber aber position() wie im Dokument stelle ich mir dann so vor:
<bsp>A</bsp> (pos 2)
<bsp>B</bsp> (pos 1)
<bsp>C</bsp> (pos 3)
Was ist jetzt <xsl:value-of select="bsp[position() = 2] />?
A, oder? - Warum oder wie funktioniert das dann, dass trotzdem im Ergebnisbaum, würde man jeweils position() mod2 ausgeben, das Ergebnis so ist?:
1
0
1
und eben nicht
0
1
1

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.

Was heisst das auf Deutsch?

funzt? = umgangssprachlich für funktioniert
und "Methode" die ich ursprünglich verwendet hätte wäre (was allerdings auf der fälschlichen Annahme zu den Positionen der Knoten basierte) nach der Sortierung einfach nur den Inhalt von "." mit position()+1 zu vergleichen (da ja im Falle ebenfalls sortierter Positionen Knoten mit gleichem Inhalt aufeinander gefolgt wären).

Wie adressiere ich denn den Knoten?
preceding-sibling::überschrift/@h1 Trifft bei mir nichts. Habe ich da einen Denkfehler?

Entschuldigung, das war ein ganz schöner Fauxpas.
preceding-sibling::überschrift[@h = 1] trifft dann natürlich auch gleich viel besser.
Zudem hätte die Frage auch lauten müssen:
Wie adressiere ich denn GENAU den Knoten - und nicht alle vorhergehenden überschriften mit h=1?

Danke nochmal und viele Grüße

Michael