我使用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"><tr></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"></tr></xsl:text>
</xsl:if>
</xsl:for-each>
</table>
答案 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() < 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的构造通常比尝试翻译其他构造更直接。