2016-07-28 10 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

ありがとう!それがまさに私が必要なものです。私は例を明確にする前に期待された動作を推測した;)私はmodトリックについては考えなかった – user3124206

関連する問題