Thomas J.S.: Danke

Beitrag lesen

Hallo (nochmal),

bin schwer begeistert!

*hüstel* ehmm... ja. Danke ;-)

Jetzt muss ich mich mal durch die Änderungen arbeiten, um zu begreifen, was du gemacht hast.

<xsl:key name="namen" match="addressbook/member" use="name" />

Erstellt einen Knotenset, der alle addressbook/member-Elemente enthält. Als Wert des Schlüssels wird der name-element verwendet.

<xsl:for-each select="member[generate-id(.) != generate-id(key('namen', name))]">

Selektiert alljenige member-Elemente wo der generierte ID für's (gegenwertigen) Element nicht mit dem generierten ID eines Elements aus dem - vom key() - Knotenset übereinstimmt; als Vergleichsbasis dient das name-Element des gegenwertigen member-Elements

-----
es wäre hier egal gewesen, ob ich in deinem Fall [generate-id(.) != generate-id(key('namen', name))]  oder generate-id(.) = generate-id(key('namen', name))] nehme.

Wenn du mehr als zwei name-Elemente mit demselben Namen hast nimm aber: <xsl:for-each select="member[generate-id(.) = generate-id(key('namen', name))]"> !
-----

<xsl:when test="position() mod 2 = 0">
Nachdem in die for-each-Schleife nur noch Elemente sind, von denen kein Duplikat mehr gibt (all das natürlich im Bezug zu member/name), kann man die Position der einzelnen Knoten in der Schleife bestimmen, deshalb kann jedes zweite Element mit einer anderen Farbe hintergelgt werden.

<xsl:for-each select="key('namen', name)">
Greift auf die Knoten zu, die im Knotenset vom key() als Wert des name-Elements denselben Wert haben wie das name-Element im gegenwertigen Element (--> das wurde ja durch das vorige for-each bestimmt).
Wenn es mehrere solche übereinstimmende Knoten im Knotenset vom key() gefunden werden, werden die Vorgaben im for-each für jede der Knoten (aus dem Knotenset vom key) angewendet.

Und im for-each kannst du dann auch wiederum sortieren etc.

Grüße
Thomas