Oding99: Rekursive Ausgabe: Tabelle in Tabelle in Tabelle...

Hi zusammen,
ich hab gesehen, dass es schon viele Fragen zu "rekursiv" gab, aber meistens ging es um die Abfrage, und nicht um die Ausgabe.

Folgendes Problem, ich habe ein XML, das sieht prinzipiell so aus:

  
<Sektor>  
<Merkmal>  
<Bezeichnung>Typ</Bezeichnung>  
<Beispielwert>DGE</Beispielwert>  
<Wert>  
<Beschreibung>Spindelachse</Beschreibung>  
<Kürzel>DGE</Kürzel>  
</Wert>  
</Merkmal>  
</Sektor>  
<Sektor>  
<Merkmal>  
<Bezeichnung>Baugröße</Bezeichnung>  
<Beispielwert>25</Beispielwert>  
</Merkmal>  
</Sektor>  
<Sektor>  
<Merkmal>  
<Bezeichnung>Hub [mm]</Bezeichnung>  
<Beispielwert>500</Beispielwert>  
</Merkmal>  
</Sektor>  

Nun möchte ich für den ersten Sektor eine Tabelle erschaffen mit anfangs 2 Zeilen à 2 Zellen.
Der 2. Sektor soll in gleicher Form in die 2. Zelle dieser Tabelle.
Der 3. Sektor in gleicher Form in die 2. Zelle der 2. Tabelle...

Hier ein (nicht funktionierender) Ansatz:

  
<xsl:template name="generatetable">  
<xsl:param name="current" select="Sektor"/>  
<table rules="all" frame="box" border="1pt">  
<tr>  
<td/>  
<td>  
<xsl:for-each select="Sektor">  
<xsl:value-of select=".//Beispielwert"/>  
<xsl:if test="position() != last()">  
<xsl:call-template name="generatetable">  
<xsl:with-param name="current" select="."/>  
</xsl:call-template>  
</xsl:if>  
</xsl:for-each>  
</td>  
</tr>  
</table>  
</xsl:template>  

Würd mich über Antworten riesig freuen.

  1. Moin!

    Mal als kleiner Denkanstoss: Bist Du sicher, dass Das ueberhaupt ein guter Ansatz ist? Tabellen in Tabellen sind normalerweise schonmal eine schlechte Loesung.

    --
    Vergesst Chuck Norris.
    Sponge Bob kann unter Wasser grillen!
    1. Ich wüsste im Moment wirklich nicht, wie ich es anders lösen kann, weil ich bestimmte Linien anzeigen lassen will, andere widerum nicht.
      Kannst Dir ja vielleicht (wenn Du kurz Zeit hättest) folgenden Link anschauen. Da klickst dann noch rechts auf Dokumentation, dann auf deutsch.
      Im öffnenden PDF gibts nen Typenschlüssel, und der soll nachgebaut werden.
      Bin für jede Anregung dankbar.

      1. Im öffnenden PDF gibts nen Typenschlüssel, und der soll nachgebaut werden.

        Du meinst z.B. die Lieferuebersicht auf Seite 3? Eine Tabelle.

        Bin für jede Anregung dankbar.

        Die Darstellung der Tabelle wird ueber CSS geregelt. Du brauchst also nur eine semantisch taugliche Tabelle und CSS fuer die Darstellung. Wenn Du jetzt erklaerst, wo dabei genau Dein Problem liegt, findet sich hier sicher jemand, der Dir zielfuehrende Hinweise gibt.

        Schritt Eins: Kannst Du mit deinen Daten eine Tabelle ohne Angaben zum Design erstellen, die das gewuenschte anzeigt? Aussehen egal.

        Schritt Zwei: CSS anlegen.

        Schritt Drei: eventuelle Modifikationen bei Schritt Eins.

        --
        Vergesst Chuck Norris.
        Sponge Bob kann unter Wasser grillen!
        1. Ja, die Lieferübersicht ist ja schlichtweg ne Tabelle.
          Der Typenschlüssel sieht noch n Tick anders aus. Das Layout sollte hier aber nach Möglichkeit beibehalten werden.
          Das Problem sind meiner Ansicht nach die Verbindungslinien von der "linken Tabelle" zur "oberen Tabelle"

          1. Hier mal noch ein Bild dazu:

            1. Schick!

              I see! Habs jetzt auch auf Seite 6 gefunden. Das ist ja auch keine richtige Tabelle sonderen eher eine Grafik. Interessant. Laesst sich aber sicher auch ohne Tabellengewirr loesen. Spontan hab ich da allerdings keine Idee.

              --
              Vergesst Chuck Norris.
              Sponge Bob kann unter Wasser grillen!
              1. Mir ist eben auch nichts eingefallen, außer es mit Tabellen zu lösen.
                Und wenn man das mit Tabellen löst muss es mit Tabelle in Tabelle in Tabelle sein, andernfalls bekommt man die Borders nicht entsprechend hin.

                Laesst sich aber sicher auch ohne Tabellengewirr loesen. Spontan hab ich da allerdings keine Idee.

                »»

                Denkst noch drüber nach, oder ist das Deine finale Antwort? :D

                Ne, wie gesagt, ich wär ja schon über nen Denkanstoß froh.

                1. Hallo,

                  Und wenn man das mit Tabellen löst muss es mit Tabelle in Tabelle in Tabelle sein,

                  nein.

                  andernfalls bekommt man die Borders nicht entsprechend hin.

                  Doch. Sieht ganz nach einer Excel-Liste aus. Da gibt's auch keine Tabellen in Zellen (außer als OLE-Objekte ...) :-)

                  Wenn's exakt so aussehen soll wie das Original, sind mindestens 16 Spalten erforderlich. Vermutlich wird's leichter, wenn man Zellen zusammenfasst.
                  table-layout: fixed und Einsatz von col-Elementen dürfte notwendig sein.

                  Freundliche Grüße

                  Vinzenz

                  1. Hallo,

                    Und wenn man das mit Tabellen löst muss es mit Tabelle in Tabelle in Tabelle sein,

                    nein.

                    andernfalls bekommt man die Borders nicht entsprechend hin.

                    Doch. Sieht ganz nach einer Excel-Liste aus. Da gibt's auch keine Tabellen in Zellen (außer als OLE-Objekte ...) :-)

                    Wenn's exakt so aussehen soll wie das Original, sind mindestens 16 Spalten erforderlich. Vermutlich wird's leichter, wenn man Zellen zusammenfasst.
                    table-layout: fixed und Einsatz von col-Elementen dürfte notwendig sein.

                    Freundliche Grüße

                    Vinzenz

                    Hi Vinzenz,
                    hat mir ner Excelliste nicht wirklich was zu tun. Ist ein Ausschnitt aus ner Dita-Datei.
                    Ich hab mir dazu allerdings auch schon mal Excel angeschaut, in der Hoffnung was abschauen zu können (mit der Webdarstellung).
                    Es soll schon aussehen wie das Original, aber eben dynamisch sein, falls es mal mehr( oder weniger) Sektoren/Merkmale/Werte hat.
                    Sprich es sind nicht immer genau 16 Spalten.
                    Aber die Sache mit den col-Elemente find ich sehr interessant.

                    1. Problem gelöst:

                        
                      <xsl:template name="generatetable">  
                      	<xsl:param name="count" select="count(//Sektor)"/>  
                      	<xsl:if test="$count > 0">  
                      		<table rules="all" frame="box">  
                      			<tr>  
                      				<td>  
                      					<xsl:call-template name="generatetable">  
                      						<xsl:with-param name="count" select="$count - 1"/>  
                      					</xsl:call-template>  
                      				</td>  
                      			</tr>  
                      		</table>  
                      	</xsl:if>  
                      </xsl:template>