2011-10-26 56 views
2

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

它在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> 
+1

你能張貼你轉換XML的樣本? – geofftnz

回答

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> 
+0

謝謝!這一定是XSLT方式:) – Bica

+0

@Bica,不客氣! –

1

您是否嘗試過這樣的事情?

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

,然後在另外一個模板

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

請記住,你應該嘗試和思考XSLT作爲模板系統,除了作爲一種編程語言更多。使用XSLT特定的構造通常比嘗試翻譯其他構造更直接。

+0

明白了,謝謝。 – Bica