Tabelle mit Hilfe von XSL darstellen
Zyrano
- xsl
0 Markus B.0 Thomas J.S.0 Thomas J.S.0 Zyrano0 Thomas J.S.0 Zyrano
Hi, da ihr mir letztes mal so prima helfen konntet hoffe ich, dass das jetzt wieder so gut klappt.
Also ich habe z.B. folgende xml datei:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<europa>
<land>
<number>1</number>
<name>Deutschland</name>
</land>
<land>
<number>2</number>
<name>Frankreich</name>
</land>
<land>
<number>3</number>
<name>Spanien</name>
</land>
<land>
<number>4</number>
<name>Niederlande</name>
</land>
<land>
<number>5</number>
<name>Polen</name>
</land>
<land>
<number>6</number>
<name>England</name>
</land>
</europa>
Nun ist es ja kein Problem eine Tabelle mit folgender struktur zu erstellen:
1 Deutschland
2 Frankreich
3 Spanien
usw...
aus Platzgründne würde ich die oben gezeigten Daten aber gerne wie folgt darstellen:
1 Deutschland 2 Frankreich
3 Spanien 4 Niederlande
5 Polen 6 England
habt ihr da eine Idee wie ich das am besten bewerkställigen könnte?
Mein erster Ansatz war, dass ich eine grosse tabelle mit einer Zeile und und 2 Spalten schaffe. in der linken spalte dann eine tabelle mit den ungeraden zahlen und recht eine mit den gerade zahlen.
das hat auch prima funktioniert, aber sobald ein land dabei war, das länger als eine zeile war hat dies einen zeilenumbruch gemacht. und das hat das alles verschoben.
ich hoffe ich konnte mein problem gut darstellen.
Vielen Dank schonmal.
guck ma auf www.w3schools.com/xsl
das steht was über die darstellung mit tabellen
hier z.b.
http://www.w3schools.com/xsl/xsl_sort.asp
Hallo,
aus Platzgründne würde ich die oben gezeigten Daten aber gerne wie folgt darstellen:
1 Deutschland 2 Frankreich
3 Spanien 4 Niederlande
5 Polen 6 Englandhabt ihr da eine Idee wie ich das am besten bewerkställigen könnte?
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dig="http://www.dig.org">
<xsl:template match="/">
<html>
<head> <title>foo</title> </head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="europa">
<table>
<xsl:call-template name="land">
<xsl:with-param name="node" select="land"/>
<xsl:with-param name="count" select="1"/>
<xsl:with-param name="maxcount" select="count(land)"/>
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="land">
<xsl:param name="node"/>
<xsl:param name="count"/>
<xsl:param name="maxcount"/>
<xsl:if test="($count mod 2 = 1) and ($count < $maxcount)">
<tr>
<td>
<xsl:value-of select="$node[number = $count]/number"/>
</td>
<td>
<xsl:value-of select="$node[number = $count]/name"/>
</td>
<td>
<xsl:value-of select="$node[number = ($count + 1)]/number"/>
</td>
<td>
<xsl:value-of select="$node[number = ($count + 1)]/name"/>
</td>
</tr>
<xsl:call-template name="land">
<xsl:with-param name="node" select="$node"/>
<xsl:with-param name="count" select="$count + 2"/>
<xsl:with-param name="maxcount" select="$maxcount"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas
... Nachtrag
die if-Abfrage im Template muss wie folgt lauten:
<xsl:if test="($count mod 2 = 1) and ($count <= $maxcount)">
damit auch ungerade Anzahl an Länder ausgegeben werden + zwei leere Zellen dann auch.
Grüße
Thomas
Vielen Dank für deine Hilfe, das hat prima funktioniert.
Jetzt hätte ich wohl noch eine kleine erweiterung. Wie würde das wohl aussehen, wenn die aufzählung nicht bei 1 sondern bei eienr geraden zahl anfängt.
das sollte dann natürlich z.b. so aussehen:
8 Deutschland 9 Frankreich
10 Spanien 11 Niederlande
usw....
Vielen Dank nochmal für deine Hilfe bis hier hin.
Hallo,
Jetzt hätte ich wohl noch eine kleine erweiterung. Wie würde das wohl aussehen, wenn die aufzählung nicht bei 1 sondern bei eienr geraden zahl anfängt.
War das eine Frage.(sic!)
das sollte dann natürlich z.b. so aussehen:
8 Deutschland 9 Frankreich
10 Spanien 11 Niederlandeusw....
...
<tr>
<td>
<xsl:value-of select="$node[position() = $count]/number"/>
</td>
<td>
<xsl:value-of select="$node[position( ) = $count]/name"/>
</td>
<td>
<xsl:value-of select="$node[position( ) = ($count + 1)]/number"/>
</td>
<td>
<xsl:value-of select="$node[position() = ($count + 1)]/name"/>
</td>
</tr>[/code]
....
alles andere bleibt unverändert.
Grüße
Thomas
Prima, hat wunderbar funktioniert.
Danke für deine Hilfe