请帮帮我。有一个节点列表。
<list>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
and so on...
</list>
需要将“n”(任意数)个列表等分。
如果节点数不均分,则让最后一组节点包含剩余的划分。
例如,如果输入列表包含 33 个元素,输出应该有 4 个元素均匀分布的部分。在导出处得到 3 部分 9 个元素和 1 个部分 6 个元素的总和 33。
输入
<ul>
<li>1</li>
<li>2</li>
...
<li>33</li>
</ul>
输出
<ul>
<li>1</li>
<li>2</li>
...
<li>9</li>
</ul>
<ul>
<li>10</li>
<li>11</li>
...
<li>18</li>
</ul>
<ul>
<li>19</li>
<li>11</li>
...
<li>27</li>
</ul>
<ul>
<li>28</li>
<li>30</li>
...
<li>33</li>
</ul>
分为 4 列。
最佳答案
此解决方案不要求要分组到列中的节点应该是兄弟节点:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vNodes" select="/*/*/text()"/>
<xsl:param name="vNumParts" select="4"/>
<xsl:variable name="vNumCols" select=
"ceiling(count($vNodes) div $vNumParts)"/>
<xsl:template match="/">
<table border="1">
<xsl:for-each select=
"$vNodes[position() mod $vNumCols = 1]">
<xsl:variable name="vCurPos" select=
"(position()-1)*$vNumCols +1"/>
<tr>
<xsl:for-each select=
"$vNodes[position() >= $vCurPos
and
not(position() > $vCurPos + $vNumCols -1)
]">
<td><xsl:copy-of select="."/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</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>
<item>15</item>
<item>16</item>
<item>17</item>
<item>18</item>
<item>19</item>
<item>20</item>
<item>21</item>
<item>22</item>
<item>23</item>
<item>24</item>
<item>25</item>
<item>26</item>
<item>27</item>
<item>28</item>
<item>29</item>
<item>30</item>
<item>31</item>
<item>32</item>
<item>33</item>
</list>
产生了想要的结果:
<table border="1">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
<td>15</td>
<td>16</td>
<td>17</td>
<td>18</td>
</tr>
<tr>
<td>19</td>
<td>20</td>
<td>21</td>
<td>22</td>
<td>23</td>
<td>24</td>
<td>25</td>
<td>26</td>
<td>27</td>
</tr>
<tr>
<td>28</td>
<td>29</td>
<td>30</td>
<td>31</td>
<td>32</td>
<td>33</td>
</tr>
</table>
关于xml - XSL : List divided into columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2461866/