[XSL] Sortierung zuerst alphanumerisch, dann numerisch

xXMrJackXx

Grünschnabel
Hallo,

ich habe ein kleines Problem beim <xsl:sort>
Ich habe z.B. folgende xml-Daten

Code:
<data>
   <key>12AB</key>
   <key>A12B</key>
   <key>BA12</key>
   <key>2AB1</key>
</data>

Mein Code sieht folgendermaßen aus:
Code:
<xsl:for-each select="data/key">
   <xsl:sort select="."/>
   <xsl:value-of select="."/>
</xsl:for-each>

Dadurch bekomme ich folgende Ausgabe:
Code:
12AB
2AB1
A12B
BA12

Ich möchte aber, dass zuerst die Werte mit alphanumerischen Zeichen am Beginn kommen und dann die numerischen:
Code:
A12B
BA12
12AB
2AB1

Ich hoffe, mein Problem ist verständlich

Danke
 
Hallo,

wenn in den KEY-Knoten nur Großbuchstaben als Alphazeichen möglich sind, dann könntest du mit der translate-Funktion die numerischen Zeichen z.B. in Kleinbuchstaben umsetzen, etwa so:
XML:
<xsl:for-each select="data/key">
  <xsl:sort select="translate(.,'0123456789','abcdefghij')" data-type="text" case-order="upper-first" />
  <xsl:copy-of select="." />
</xsl:for-each>
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Antwort.
Da gibt's nur leider ein Problem.
Damit bekomme ich z.B. folgende Sortierung:
Code:
A12B
BA12
12AB
2AB1
DA23
3333

Bei Angabe von "upper-first" wird nämlich "A a B b C c" sortiert und nicht "A B C a b c" (was ich eigentlich benötigen würde; es sollten zuerst ALLE Alphazeichen sein, dann die Nummern).
 
Hallo,

tut mir leid, da muss ich passen: Ich wende XSL nur in der Version 1 im Zusammenhang mit LIBXSLT an. In der XSL-Version 2 kann man bei der Sortierung eine Kollation angeben, aber damit habe ich keine Erfahrung.
--> Use custom collations in XSLT 2.0
... es sollten zuerst ALLE Alphazeichen ...
Was bedeutet das? Alle UTF-8-Alphazeichen? Das kann ich kaum glauben. Mit einer endlichen Zeichenanzahl in den KEY-Knoten könnte man evtl. (mit XSLT v1) eine neues Sortierkriterium als Attribut erzeugen, das ist aber sicherlich recht umständlich. Ich würde deshalb diese Sortierung in der umgebenden Programmiersprache vornehmen.
 

Neue Beiträge

Zurück