代码之家  ›  专栏  ›  技术社区  ›  Matthew Dresser

使用xslt将xml列表转换为具有多列的html表

  •  0
  • Matthew Dresser  · 技术社区  · 16 年前

    假设我有一个由列表组成的xml文档,如下所示:

    <Items>
      <Item>First Item</Item>
      <Item>Second Item</Item>
      <Item>Third Item</Item>
      <Item>4</Item>
      <Item>Five</Item>
    </Items>
    

    我想将其转换为一个包含两列Item元素的html表(目前我并不担心它是ordererd左下右还是左右上下)。

    <table>
      <tr>
        <td>First Item</td>
        <td>Second Item</td>
      </tr>
      <tr>
        <td>Third Item</td>
        <td>4</td>
      </tr>
      <tr>
        <td>Five</td>
        <td></td>
      </tr>
    </table>
    

    我明白,通过以下xslt转换,我可以得到一个只有一列的表,但无法弄清楚如何得到多列。

    <table>
      <xsl:for-each select="Items">
        <tr>
          <td><xsl:value-of select="Item"/></td>
        </tr>
      </xsl:for-each>
    </table>
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Rubens Farias    16 年前

    试试这个:

    <xsl:stylesheet version="1.0" 
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/Items">
        <table>
          <xsl:for-each select="Item[position() mod 2 = 1]">
            <xsl:variable name="pos" select="position() - 1" />
            <tr>
              <td><xsl:value-of select="."/></td>
              <td><xsl:value-of select="//Item[position() = ($pos * 2) + 2]"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </xsl:template>
    </xsl:stylesheet>