tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1304
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    xXMrJackXx xXMrJackXx ist offline Grünschnabel
    Registriert seit
    Nov 2007
    Beiträge
    4
    Hallo,

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

    Code :
    1
    2
    3
    4
    5
    6
    
    <data>
       <key>12AB</key>
       <key>A12B</key>
       <key>BA12</key>
       <key>2AB1</key>
    </data>

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

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

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

    Ich hoffe, mein Problem ist verständlich

    Danke
     

  2. #2
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    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:
    Code xml:
    1
    2
    3
    4
    
    <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>
     

  3. #3
    xXMrJackXx xXMrJackXx ist offline Grünschnabel
    Registriert seit
    Nov 2007
    Beiträge
    4
    Danke für die Antwort.
    Da gibt's nur leider ein Problem.
    Damit bekomme ich z.B. folgende Sortierung:
    Code :
    1
    2
    3
    4
    5
    6
    
    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).
     

  4. #4
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    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.
     

Ähnliche Themen

  1. phpData zuerst laden, dann anzeigen?
    Von crazy_chicken im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 17.08.11, 01:05
  2. Antworten: 6
    Letzter Beitrag: 20.03.08, 22:39
  3. mySQL, InnoDB, Sortierung numerisch und alphabetisch mischen?
    Von jeipack im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.04.07, 12:00
  4. zuerst mc bewegen dann attachen dann Sprung zu frame 2
    Von flashmaus im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 03.12.04, 11:54
  5. zuerst bild laden - dann weiterleiten
    Von chappechaes im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 17.03.04, 00:21