2016-07-28 106 views
0

我想使用應該垂直排序的xslt 1.0將一長串列項分解爲列。我已經看到了如何使用水平排序來解決這個問題的解決方案,但無法弄清楚如何垂直排列。將列表劃分爲使用xslt垂直排列的列

下面是示例輸入:

<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> 

下面是所需的輸出(3列):

<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

的例子是不明確的。有14個項目時請顯示預期結果。 –

回答

1

我相信這應該爲你工作。它將項目分成(任意)給定數量的列,並使用「先向下」方法填充這些列。

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> 

應用於以下輸入例如:

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> 

結果將是:

<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> 

呈現爲:

enter image description here

+0

謝謝!這正是我需要的。在我能夠澄清這個例子之前,你猜對了預期的行爲;)我沒有想到模特技巧 – user3124206