我的XML格式如下:
<Items>
<Item name="Item1">
<Label>Label 1</Label>
</Item>
<Item name="Item2">
<Label>Label 2</Label>
</Item>
<ColumnBreak></ColumnBreak>
<Item name="Item3">
<Label>Label 3</Label>
</Item>
<Item name="Item4">
<Label>Label 4</Label>
</Item>
</Items>
我想以<ColumnBreak>
作为行/列转换器的方式将其转换为HTML。对于上述示例,预期的HTML div输出为:
Column 1 Column 2
-------- --------
Row 1 | Label 1 Label 3
Row 2 | Label 2 Label 4
例如,如果在XML中的Item3之后设置了<ColumnBreak>
,则结果div应该具有3行2列,而第二列仅显示Label 4。
答案 0 :(得分:0)
用一个简单的代码回答我自己的问题。使用HTML表代替div。
<xsl:template match="/Items">
<xsl:variable name="cols" select="round(12 div (count(ColumnBreak) + 1))"/>
<xsl:variable name="rows" select="round(count(Item) div (count(ColumnBreak) + 1))" />
<table>
<xsl:for-each select="Item[position() <= $rows]">
<xsl:variable name="x" select="position() mod $rows"/>
<tr>
<xsl:for-each select="../Item[position() mod $rows = $x]">
<td style="col-md-{$cols}">
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>