XSLT使用动态行和列将XML转换为HTML

时间:2018-08-06 09:30:44

标签: c# html xml xslt

我的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。

1 个答案:

答案 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() &lt;= $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>