Sonntag, 8. Juli 2007

Besser sortieren mit XSLT

Über das Tag <xsl:sort> läßt sich ein Dokument recht einfach sortieren. Nur gibt es dabei ein kleines Problem: Über das Attribut "case-order" kann man nur festlegen, ob zuerst alle Einträge mit Großbuchstaben (upper-first) oder mit Kleinbuchstaben (lower-first) in alphabetischer Reihenfolge gelistet werden sollen.
  1. Apfel
  2. Birne
  3. Orange
  4. Zitrone
  5. ausmalen
  6. erarbeiten
  7. sortieren
  8. zensieren
In aller Regel ist dies nicht das, was man wirklich möchte. Ziel ist es in den meisten Fällen, dass alle Einträge - egal ob sie mit einem Groß- oder Kleinbuchstaben beginnen - alphabetisch sortiert aufgelistet werden. Also so:
  1. Apfel
  2. ausmalen
  3. Birne
  4. erarbeiten
  5. Orange
  6. sortieren
  7. zensieren
  8. Zitrone
Die Lösung für dieses Problem ist recht einfach: Man wandelt mit Hilfe der XPath-Funktion translate() einfach alle Großbuchstaben in Kleinbuchstaben um und führt danach die Sortierung durch. Dabei ist diese Umwandlung nur für die Sortierung relevant; ausgegeben wird der Wert unabhängig davon.

In der Praxis sieht dies dann so aus:
<xsl:sort
date-type="text"
order="ascending"
lang="de"
select="translate(NodeName,\'ABCDEFGHIJKLMNOPQRSTUVWXYZ\',\'abcdefghijklmnopqrstuvwxyz\')"/>
Eine deutsche Übersicht aller XPath-Funktionen inklusiver Erklärung und Beispielen findet sich auch im XML-Bereich von SELFHTML.

Keine Kommentare:

Kommentar veröffentlichen