Azubi: Zählschleifen mit XML

Guten Morgen,

ich stehe vor folgendem Problem. Ich möchte Daten aus einer XML Datei mittels SVG visualisieren. In der XML stehen diverse Zahlenwerte, die ich in einer Balkengrafik darstellen möchte. Das funktioniert auch solange, wie ich die Daten der Reihe nach darstelle. Nun möchte ich aber die Daten nach bestimmten Kriterien sortieren.

Konkretes Beispiel:
<filename>001.001_ch1v1.wav.xml</filename>
<filename>001.002_ch1v1.wav.xml</filename>
<filename>002.001_ch1v1.wav.xml</filename>
<filename>002.002_ch1v1.wav.xml</filename>

Hierbei sollen nun nicht die ersten drei Ziffern das Sortierkriterium sein, sondern die drei danach. Da man bei SVG die Elemente nicht mit HTML Tags auf dem Bildschirm plazieren kann, habe ich bisher die Position des Elements im Datenbaum dazu benutzt.

z.B.:
<xsl:variable name="yr" select="8+12*(position()-1)"/>

Und nun zum eigentlichen Problem (schwafel). Ich möchte ja nun zuerst das erste und dritte Element untereinander ausgeben und dann das zweite und vierte. Ich hoffe ich habe mein Problem verständlich Ausgedrückt.

Gruß
Azubi

  1. Hallo Azubi,

    wenn ich dich nicht komplett missverstanden habe, dann
    müsste das Problem doch mit xsl:sort und substring zu lösen sein, oder?

    Gruß Mia

  2. Hallo,

    Und nun zum eigentlichen Problem (schwafel). Ich möchte ja nun zuerst das erste und dritte Element untereinander ausgeben und dann das zweite und vierte.

    Bezogen auf das Beispiel liefert dieser Ansatz

    <xsl:for-each select="filename">
      <xsl:sort select="substring-after(substring-before(.,'_'),'.')"/>
      <xsl:value-of select="."/><br />
    </xsl:for-each>

    die Ausgabe in der gesuchten Reihenfolge:

    001.001_ch1v1.wav.xml
    002.001_ch1v1.wav.xml
    001.002_ch1v1.wav.xml
    002.002_ch1v1.wav.xml

    Die SVG-Ausgaben lassen sich darauf aufbauen.

    MfG, Thomas

    1. Hallo Thomas, hallo Mia,

      die Lösung mit dem Substringkonstrukt war genau richtig. Danke für eure  Mühen!

      Gruß Azubi