将列表划分为使用xslt垂直排序的列

时间:2016-07-28 08:05:25

标签: xslt xslt-1.0

我想使用应垂直排序的xslt 1.0将一长串项目分解为列。我已经看到了如何使用水平排序来解决这个问题的解决方案,但无法弄清楚如何垂直排序。

以下是示例输入:

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

1 个答案:

答案 0 :(得分: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