使用XSLT生成一个简单的HTML表

时间:2011-10-26 19:23:15

标签: xml xslt xpath

我使用XSLT使用XML文件中的信息生成HTML表。 我想在每个TR中只有4个TD。

它适用于Chrome和Safari。不在Firefox中。我知道Firefox不支持'disable-output-escaping'所以我知道这是问题(它只是写在网页上)。是否有另一种方法可以在客户端使用XSLT生成这种(简单)表?

我的代码如下所示:

<table>
<xsl:for-each select="movies/movie">
   <xsl:if test="(position() = 1) or ((position() mod 4) = 1)">
       <!-- This is a <tr> -->
      <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text>
   </xsl:if>
   <td>
     <!-- Some stuff goes here. -->
   </td>
   <xsl:if test="((position() mod 4) = 0) or (position() = last())">
       <!-- This is a </tr> -->
      <xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text>
   </xsl:if> 
</xsl:for-each>
</table>

2 个答案:

答案 0 :(得分:2)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <table>
      <xsl:apply-templates select="movies/movie[position() mod 4 = 1]"/>
    </table>
  </xsl:template>

  <xsl:template match="movie">
    <tr>
      <xsl:for-each select=". | following-sibling::movie[position() &lt; 4]">
        <td>
          <xsl:value-of select="."/>
        </td>
      </xsl:for-each>
    </tr>
  </xsl:template>

</xsl:stylesheet>

输入XML:

<movies>
  <movie>a</movie>
  <movie>b</movie>
  <movie>c</movie>
  <movie>d</movie>
  <movie>e</movie>
  <movie>f</movie>
  <movie>g</movie>
  <movie>h</movie>
</movies>

输出XML:

<table>
  <tr>
    <td>a</td>
    <td>b</td>
    <td>c</td>
    <td>d</td>
  </tr>
  <tr>
    <td>e</td>
    <td>f</td>
    <td>g</td>
    <td>h</td>
  </tr>
</table>

答案 1 :(得分:1)

你尝试过这样的事吗?

<table>
<tr><xsl:apply-templates select='movies/movie' /></tr>
</table>

然后,在另一个模板中

<xsl:template match='movie'>
   <td><xsl:value-of select='.' /></td>
</xsl>

请记住,您应该尝试将XSLT视为模板系统,而​​不仅仅是编程语言。使用特定于XSLT的构造通常比尝试翻译其他构造更直接。