Announcement

Collapse
No announcement yet.

Knifflige Sortierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Knifflige Sortierung

    Hallo XSL-Experten!

    Eine Knobelfrage:<BR>Die Folge von Strings der Art:
    <BR>
    1.2.3<BR>1<BR>1.2<BR>2.1<BR>2<BR>2.1.4<BR>5<BR>5.1 <BR>usw.<BR>muss mit XSLT so sortiert werden, dass es sich eine richtige Reienfolge ergibt. D.h:<BR>
    <b>1<BR>1.2<BR>1.2.3<BR>2<BR>2.1<BR>2.1.4<BR></b>etc.<BR>
    <BR>Mit anderen Worten ein String hat die Semantik einer Zahl, lässt sich aber als eine Zahl nicht Darstellen (oder ich weiss nicht wie?!?), <BR>und bei der Sortierung als Text steht die 10 vor 2!<BR>Punkte mit translate() rauszulöschen funktioniert auch nicht richtig, weill dann die 2 vor 1.2.3 steht (logisch 2 ist kleiner als 123).<BR>Wie Ihr bestimmt bemerkt habt, geht's hier um so eine Art Gliederung, die ich leider mit ins XML-Datei nehmen muß,<BR> weil das die Kennungen von Prozessen in einem Workflow-Chart sind. Somit ist auch die Tiefe der Gliederung nicht begrenzt.<BR><BR>
    Für jede Anregung bin ich sehr dankbar.<BR>
    Gruß<BR>Dieter

  • #2
    Hallo,

    wie wärs, wenn auch die 2 auf 200 aufgesetzt würde.

    Gruß, Norma

    Comment


    • #3
      Hallo Norman,<BR><BR>

      daran habe ich auch schon gedacht, blos die Tiefe der Gliederung ist nicht variabel.<BR>Es kann sein, dass es nicht 200 sondern 2000000 sein müssen.<BR>Also es ist nicht bekannt wieviele Nullen aufgesetzt werden sollen.
      <BR><BR>Gruß<BR>Diete

      Comment


      • #4
        Hallo Dieter,

        kann man denn keinen Vergleich mit 1.2 und 1 und 1.63434 machen? Dann würde man ein Komma (wenn mind. eines da ist) stehenlassen und könnte durchsortieren.

        Gruß, Norma

        Comment


        • #5
          Hallo Norman,<BR><BR>

          vielen Dank für die Idee.<BR>Das ist sehr interessant.<BR>
          Das heisst, es sollten alle Punkte rausgelöscht werden bis auf den ersten.<BR>Ich werde es in nächster Zeit ausprobieren, ob es mit den Stringfunktionen von XSLT sowas möglich ist.<BR><BR>
          Nochmalls vielen Dank für den Vorschlag.<BR><BR>
          Gruß,<BR>Diete

          Comment


          • #6
            Hallo Dieter,

            kann man davon ausgehen, dass die Indizes am Ende immer keinen Punkt oder innerhalb keine anderen Zeichen als Zahlen oder Punkte enthalten?

            Gruß, Norma

            Comment


            • #7
              Hallo Norman!<BR><BR>
              Ja, so ist es. <BR>
              <BR><BR>
              Gruß<BR>
              Diete

              Comment


              • #8
                Dann hätte ich folgenden sort-Vorschlag:
                &lt;xsl:sort data-type="number" select="number(concat(substring-before(concat(.,'.'),'.'),'.',translate(substring-after(concat(.,'.'),'.'),'.','')))" /&gt;

                Vieleicht kannst Du damit was anfangen?

                Gruß, Norma

                Comment


                • #9
                  Hi Norman!<BR><BR>
                  Es funktioniert! <BR>
                  Ich habe die Sort-Anweisung von Dir in mein Stylecheet eingebaut
                  und transformiert.<BR>
                  <B>Es ergibt sich die erforderliche Reihenfolge</B><BR>
                  Ich muß noch ausprobieren, wie es mit z.B. 2.1.10 funktioniert:<BR>wird es zu 2.11 oder bleibt es 2.110?<BR><BR>
                  Nochmals Vielen Dank für Deine Hilfe ))<BR><BR>
                  Gruß, Diete

                  Comment


                  • #10
                    Jaaa, ( ich habe dann mit anderen Indizies ausprobiert <BR><BR>
                    Das ist rausgekommen:<BR>
                    1 Herstellen<BR>
                    2.4.10 Verkaufen<BR>
                    2.4.11 Konstruieren<BR>
                    2.4.3 Verpacken<BR>
                    2.4.9 Entwickeln<BR><BR>
                    Ausserdem überlege ich, wie kann es zwischen z.B. 4.1.11 und 4.1.1.1<BR>unterschieden werden?<BR>
                    Gruß, Diete

                    Comment


                    • #11
                      Hallo Dieter,

                      die sort-Anweisung ändert nichts an der Ausgabe. Wenn die Ausgabe für die Indizes mit z.B. &lt;xsl:value-of select="."/ &gt; realisiert wird, bleibt alles beim Alten. Ich habe die sort-Anweisung innerhalb einer apply-templates-Anweisung positioniert und die Ausgabe damit in ein neues entsprechendes Template gesetzt.

                      Gruß, Norma

                      Comment


                      • #12
                        Hallo Dieter,

                        ja stimmt, es ist kniffliger als es aussieht.

                        Gruß, Norma

                        Comment


                        • #13
                          Ja, das merke ich auch <BR>
                          ich mache mir eine XML-Datei<BR>
                          zum Versuchskaninchen <BR>
                          Wo ich die ausgefallensten Gliederungen testen kann.<BR>
                          <BR>Gruß, Diete

                          Comment

                          Working...
                          X