Verständnisfrage zu Tabellen-Konstruktion
kaepten
- xsl
0 Thomas Meinike0 Thomas J.S.0 kaepten
Hallo Self-Freunde
Ich habe ein XML:
<tabelle>
<spalte name="1">
<item>zelle1</item>
<item>zelle2</item>
</spalte>
<spalte name="2">
<item>zelle3</item>
<item>zelle4</item>
<item>zelle5</item>
</spalte>
</tabelle>
Ich habe ein XSL dazu:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
</head>
<body><table border="1">
xsl:apply-templates/
</table>
</body>
</html>
</xsl:template>
<xsl:template match="spalte">
<tr>
xsl:apply-templates/
</tr>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
Das gibt mir folgenden transformierten Output:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head/>
<body>
<table border="1">
<tr>
<td>zelle1</td>
<td>zelle2</td>
</tr>
<tr>
<td>zelle3</td>
<td>zelle4</td>
<td>zelle5</td>
</tr>
</table>
</body>
</html>
Wie man unschwer erkennen kann, stimmt die Zellenanzahl beim transformierten Output nicht überein. HTML-technisch gesehen sehr unschön.
Wie begegnet man diesem Umstand? Mein primärer Output ist nicht HTML wie oben dargestellt. Aber es soll eine Option sein. Wie aber begegne ich dem unschönen Umstand, dass mir eine Zelle fehlt? Kann ich die fehlende Zelle irgendwie einbauen? Oder gar ein Attribut "colspan" einbauen?
Ich suche natürlich nach einer Lösung, die nicht bedingt dass mein XML anders aufgebaut ist...
Vielen Dank für Hinweise und Tipps
cheers
kaepten
Hallo,
Wie begegnet man diesem Umstand? Mein primärer Output ist nicht HTML wie oben dargestellt. Aber es soll eine Option sein. Wie aber begegne ich dem unschönen Umstand, dass mir eine Zelle fehlt? Kann ich die fehlende Zelle irgendwie einbauen? Oder gar ein Attribut "colspan" einbauen?
Probiere es mit diesem Template fuer spalte:
<xsl:template match="spalte">
<tr>
<td>
<table width="100%">
<tr>
xsl:apply-templates/
</tr>
</table>
</td>
</tr>
</xsl:template>
Dazu noch etwas CSS:
table,td
{
border: 1px solid #000;
border-collapse: collapse;
border-spacing: 0;
margin: 0;
padding: 0;
}
MfG, Thomas
Hallo,
Wie man unschwer erkennen kann, stimmt die Zellenanzahl beim transformierten Output nicht überein. HTML-technisch gesehen sehr unschön.
Wie begegnet man diesem Umstand? Mein primärer Output ist nicht HTML wie oben dargestellt. Aber es soll eine Option sein. Wie aber begegne ich dem unschönen Umstand, dass mir eine Zelle fehlt? Kann ich die fehlende Zelle irgendwie einbauen? Oder gar ein Attribut "colspan" einbauen?
Grüße
Thomas
------------------------------
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="maxitem">
<xsl:for-each select="//spalte">
<xsl:sort select="count(item)" data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="count(item)" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:template match="/">
<html>
<head></head>
<body>
xsl:apply-templates/
</body>
</html>
</xsl:template>
<xsl:template match="tabelle">
<table border="1">
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="spalte">
<xsl:variable name="currentitem" select="count(item)" />
<tr>
xsl:apply-templates/
<xsl:if test="$currentitem < $maxitem">
<xsl:call-template name="fori">
<xsl:with-param name="myCounter" select="$currentitem"/>
</xsl:call-template>
</xsl:if>
</tr>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template name="fori">
<xsl:param name="myCounter"/>
<xsl:variable name="mbCounter" select="$myCounter + 1"/>
<td> </td>
<xsl:if test="$mbCounter < $maxitem">
<xsl:call-template name="fori">
<xsl:with-param name="myCounter" select="$mbCounter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Vielen Dank!
Das werde ich nun sehr genau studieren, es funktioniert perfekt. Ich seh schon, dass es noch einige Zeit dauern wird, bis ich mit der XSLT wirklich zurecht komme :-(
Grüsse
Patrik