Thomas J.S.: Zugriff auf vorheriges Element bei Sortierung

Beitrag lesen

Hallo,

<xsl:key name="firstletter" match="elem" use="translate(substring(@name, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
[...]

Mal gucken - das muß ich mir erst in Ruhe reinziehen, was das tut.
Mit key hab ich noch nicht gearbeitet.

Der key erstellt quasi ein Array in dem alle <elem>-elemente drinn sind, der WErt des Schlüssels ist der erste Buchstabe (großgeschrieben) den @name-Attributes

------
<xsl:for-each select="elem[generate-id() = generate-id(key('firstletter', translate(substring(@name, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'))[1])]">

"elem[generate-id()"

Generiert eine ID für das <elem>-Element
"generate-id(key('firstletter', translate(substring(@name, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'))[1])]"

Generiert eine ID für das erste <elem>-Element aus der (mit xsl:key) erstellten Grupppe, wo der Schlüssel für das Aktuelle Element passt.
(also z.B. für das erste vorkommende <elem> dessen @name mit einem "A" beginnt.)

Wenn die zwei ID identisch sind, wird ein Link erstellt, mit dem Anfangsbuchstaben von @name des gegenwärtigen Elements.

-----------
Das Problem dabei ist der Zugriff auf das in der Sortierreihenfolge vorherige Element.
Wenn ich die Position des aktuellen Elements um 1 verringert für den Zugriff benutze, bekomme ich das entsprechende Element aus der XML-Dokumentreihenfolge, nicht aus der Sortierreihenfolge.
-----------

Sort gilt immer nur für die Sortierung in der Ausgabe, nie aber für die Sortierung im Transformationsprozess selbst.

Grüße
Thomas