2016-09-21 1 views
0

Ich versuche, eine Tabelle nach Spalte durchlaufen und transformieren sie in einzelne Divs. Ich möchte tr [1]/td [1], tr [2]/td [1], tr [3]/td [1] haben ... alle gehören zu einem div. Dann würde ich gerne zu tr [1]/td [2], tr [2]/td [2], tr [3]/td [2] weitergehen.Loop-Through-Tabelle

Ich bin in der Lage, meine Tabelle zu transformieren, wenn ich einfacheren Code verwende, aber ich habe Probleme, jede tr Zeile hinunter zu springen. Unten ist mein XSLT. Jede Hilfe wäre großartig. Ich bin ziemlich neu in XSLT, aber nicht programmieren. Das divs/styling ist einfach, um die Ausgabe einfacher zu sehen.

XML:

<table class="table-with-caption"> 
    <thead> 
    <tr> 
     <th>Column Title 1</th> 
     <th>Column Title 2</th> 
     <th>Column Title 3</th> 
     <th>Column Title 4</th> 
    </tr> 
    </thead> 
    <tfoot> 
    <tr> 
     <td class="alert-info table-scroll-option" colspan="4">column</td> 
    </tr> 
    </tfoot> 
    <tbody> 
    <tr> 
     <td>TR1, TD1</td> 
     <td><span>TR1, TD2</span></td> 
     <td><span>TR1, TD3</span></td> 
     <td><span>TR1, TD4</span></td> 
    </tr> 
    <tr> 
    <td><span>TR2, TD1</span></td> 
    <td>Atque ab corporis modi deserunt adipisci, expedita temporibus.</td> 
    <td>Vitae, sint ullam velit accusantium, dolorum ad dolorem.</td> 
    <td>Iusto expedita minus praesentium vero voluptatum aut laboriosam.</td> 
    </tr> 
    <tr> 
    <td><span>TR3, TD1</span>.</td> 
    <td>Consequuntur corporis quo libero fuga ducimus provident minus.</td> 
    <td>Natus reiciendis molestias earum, dolorum similique amet quasi.</td> 
    <td>Consequuntur sunt minus laudantium, magnam labore, debitis quia!</td> 
    </tr> 
    </tbody> 
</table> 

XSL:

<xsl:for-each select="tbody/tr[position()&lt;=$count-rows]"> 
     <xsl:variable select="1" name="counter" /> 
     <div style="border:thin solid red; padding 5px; margin:5px;"> 
     <xsl:for-each select="tr[$counter]/td[position() le $count-cols]"> 
      <div style="border:thin solid blue; padding 5px; margin:5px;"> 
      <xsl:apply-templates select="node()[name() != 'caption']|attribute()[name() != 'class' and name() != 'tfoot']" /> 
      </div> 
      <xsl:with-param name="counter" select="$counter + 1"/> 
     </xsl:for-each> 

     </div> 
    </xsl:for-each> 
    </div> 
</xsl:when> 

Erwartete Ausgabe:

<div style="border:thin solid red; padding 5px; margin:5px;"> 
    <div style="border:thin solid blue; padding 5px; margin:5px;">TR1, TD1</div> 
    <div style="border:thin solid blue; padding 5px; margin:5px;"><span>TR2, TD1</span></div> 
    <div style="border:thin solid blue; padding 5px; margin:5px;"><span>TR3, TD1</span></div> 
</div> 
+0

zeigen Bitte ein Beispiel für den Eingang und den erwarteten Ausgang - siehe: [MCVE]. –

+0

Siehe auch: http://StackOverflow.com/a/23953021/3016153 und http://StackOverflow.com/A/37799749/3016153 –

+0

Vielen Dank, ich habe zusätzlichen Code hinzugefügt und ich werde in die von Ihnen bereitgestellten Links schauen. – NaCo

Antwort

0

Mit den Ressourcen @ michael.hor257k eingereicht, konnte ich meinen Code herausfinden. Hier ist, was ich kam mit:

<xsl:when test="tfoot/tr/td = 'column'"> 
    <div class="grid "> 
    <xsl:variable name="row" select="tbody/tr"/> 
    <xsl:variable name="col" select="tbody/tr[1]/td"/> 

    <xsl:for-each select="$col">  
     <xsl:variable name="i" select="position()" /> 
      <div class="grid_item" style="border:thin solid red; padding 5px; margin:5px;"> 
       <xsl:for-each select="$row"> 
        <div style="border:thin solid blue; padding 5px; margin:5px;"> 
         <xsl:value-of select="td[$i]"/><br/><br/> 
        </div> 
       </xsl:for-each> 
      </div> 
      <xsl:variable name="i" select="$i+1" /> 
     </xsl:for-each> 
    </div> 
</xsl:when> 

, dass die folgende Ausgabe erzeugt, die die Tabelle zu divs konvertiert: Div Output

+0

Dies ist für niemanden hilfreich, weil es Kontext fehlt. –

+0

Wie fehlt es dem Kontext? Ihre Antwort fehlt Kontext. Wenn Sie mehr Informationen darüber geben, was Sie meinen, werde ich diesen Beitrag gerne bearbeiten. Dieser Code xsl verwendet den Code in meinem XML in meinem ursprünglichen Code, um die erste Tabellenzelle für jede Zeile zu ziehen. Dann geht es zurück in die oberste Tabellenzeile und zieht die zweite Tabellenzelle für jede Zeile. Es tut dies, bis es jede Tabellenzelle gepackt hat. Eine Tabelle, die über Zeilen gelesen wird, im Wesentlichen in eine Spalte formatierte divs. Das temporäre Styling in den divs wurde verwendet, um die Codeausgabe einfacher zu machen. – NaCo

+0

Es fehlt Kontext, weil es mit 'xsl: when' beginnt. Um es nützlich zu machen, posten Sie ein ** vollständiges ** (wenn auch minimales) Stylesheet. –