2016-07-28 53 views
0

Ich würde gerne eine lange Liste von Elementen in Spalten mit Xslt 1.0, die vertikal angeordnet werden sollte, zerlegen. Ich habe Lösungen gesehen, wie man das mit horizontaler Ordnung macht, aber ich kann nicht herausfinden, wie das vertikal funktioniert. HierTeilen Sie eine Liste in vertikal sortierte Spalten mit xslt

ist Abtastwerteingang:

<list> 
<item>1</item> 
<item>2</item> 
<item>3</item> 
<item>4</item> 
<item>5</item> 
<item>6</item> 
<item>7</item> 
<item>8</item> 
<item>9</item> 
<item>10</item> 
<item>11</item> 
<item>12</item> 
<item>13</item> 
<item>14</item> 
</list> 

Hier ist die gewünschte Ausgabe (3 Spalten):

<table> 
<tr> 
<td>1</td> 
<td>6</td> 
<td>11</td> 
</tr> 
<tr> 
<td>2</td> 
<td>7</td> 
<td>12</td> 
</tr> 
<tr> 
<td>3</td> 
<td>8</td> 
<td>13</td> 
</tr> 
<tr> 
<td>4</td> 
<td>9</td> 
<td>14</td> 
</tr> 
<tr> 
<td>5</td> 
<td>10</td> 
<td></td> 
</tr> 
</table> 
+0

Das Beispiel nicht eindeutig ist. Bitte zeigen Sie das erwartete Ergebnis, wenn 14 Artikel vorhanden sind. –

Antwort

1

Ich glaube, dies sollte für Sie arbeiten. Sie teilt die Elemente in (beliebige) angegebene Spalten auf und füllt diese Spalten mit der Methode "down first".

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:param name="columns" select="3" /> 

<xsl:template match="/list"> 
    <xsl:variable name="rows" select="ceiling(count(item) div $columns)" /> 
    <table border="1"> 
     <xsl:for-each select="item[position() &lt;= $rows]"> 
      <xsl:variable name="row" select="position() mod $rows" /> 
      <tr> 
       <xsl:apply-templates select="../item[position() mod $rows = $row]"/> 
      </tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

<xsl:template match="item"> 
    <td> 
     <xsl:value-of select="."/> 
    </td> 
</xsl:template> 

</xsl:stylesheet> 

dem folgenden Beispiel angewendet Eingangs:

XML

<list> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
    <item>4</item> 
    <item>5</item> 
    <item>6</item> 
    <item>7</item> 
    <item>8</item> 
    <item>9</item> 
    <item>10</item> 
    <item>11</item> 
    <item>12</item> 
    <item>13</item> 
    <item>14</item> 
</list> 

das Ergebnis wird sein:

<table border="1"> 
    <tr> 
     <td>1</td> 
     <td>6</td> 
     <td>11</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>7</td> 
     <td>12</td> 
    </tr> 
    <tr> 
     <td>3</td> 
     <td>8</td> 
     <td>13</td> 
    </tr> 
    <tr> 
     <td>4</td> 
     <td>9</td> 
     <td>14</td> 
    </tr> 
    <tr> 
     <td>5</td> 
     <td>10</td> 
    </tr> 
</table> 

gemacht wie:

enter image description here

+0

Danke! Genau das brauche ich. Du hast das erwartete Verhalten erraten, bevor ich das Beispiel verdeutlichen konnte;) Ich habe nicht über den Mod-Trick nachgedacht – user3124206