我在看一個類似的問題是什麼在這裏XSL:將XML爲有序多列的HTML表格
Transforming List into a 2-D Table
覆蓋但有輕微的皺紋。我的XML沒有任何特定的順序,我想對它進行排序以供顯示。例如我的XML是
<items>
<item>A</item>
<item>C</item>
<item>E</item>
<item>B</item>
<item>D</item>
<!-- ... any number of item nodes ... -->
<item>
,我想我的輸出是(這裏我忽略用於說明目的的非命名節點)
<table>
<tr>
<td>A</td>
<td>C</td>
<td>E</td>
</tr>
<tr>
<td>B</td>
<td>D</td>
<td />
</tr>
</table>
我立足這一關的XSL是從以上的鏈接(我需要使用XSL 1.0):
<xsl:template match="/*">
<table>
<xsl:call-template name="make-columns">
<xsl:with-param name="nodelist" select="item"/>
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="make-columns">
<xsl:param name="nodelist"/>
<xsl:param name="columns-number" select="3"/>
<tr>
<xsl:apply-templates select="$nodelist[
not(position() > $columns-number)
]"/>
<xsl:if test="count($nodelist) < $columns-number">
<xsl:call-template name="empty-cells">
<xsl:with-param name="finish"
select="$columns-number - count($nodelist)"/>
</xsl:call-template>
</xsl:if>
</tr>
<!-- If some nodes are left, recursively call current
template, passing only nodes that are left -->
<xsl:if test="count($nodelist) > $columns-number">
<xsl:call-template name="make-columns">
<xsl:with-param name="nodelist" select="$nodelist[
position() > $columns-number
]"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template name="empty-cells">
<xsl:param name="finish"/>
<td/>
<xsl:if test="not($finish = 1)">
<xsl:call-template name="empty-cells">
<xsl:with-param name="finish" select="$finish - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
我已經嘗試在各種應用程序模板中插入命令,但不起作用。
想法?從評論
傑夫
更新
我想輸出multicolum表 3列,其中的條目按字母順序排列的 垂直
謝謝!這很好用! – 2011-04-05 00:10:41
@ Jeffrey-Hersh:在所以你應該接受兩個答案中的一個 - @Alejandro和我都提供了正確和很好的答案。要接受答案,請點擊旁邊的綠色複選標記。 – 2011-04-05 01:50:18