Thomas J.S.: Verständnisfrage zu Tabellen-Konstruktion

Beitrag lesen

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?

  1. Höchste Anzahl der <items> die eine <spalte> haben kann herausfinden
  2. Im Tempalte für <spalte> die aktuelle Anzahl der <item> mit der höchste Zahl vergleichen
  3. Ein rekursives Template aufrufen, dass für jedes fehlende <item> ein (hier) leeres <td> erzeugt.

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>&#160;</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>