Zählschleifen mit XML
Azubi
- xsl
0 Mia0 Thomas Meinike0 Azubi
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
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
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
Hallo Thomas, hallo Mia,
die Lösung mit dem Substringkonstrukt war genau richtig. Danke für eure Mühen!
Gruß Azubi