自动添加空表格单元格

时间:2014-03-23 15:55:27

标签: html xml xslt html-table

    <table>
                <xsl:for-each select="omroep" > 
                    <tr>
                        <td><xsl:value-of select="@afkorting"/></td>
                        <xsl:for-each select="programma" > 
                            <td>
                                <div class="blauw"><xsl:value-of select="@begin-tijd" /></div>
                                <div>
                                    <span class="red"><xsl:if test="@type='Reeks'">Reeks </xsl:if></span>
                    <span class="red"><xsl:if test="@type='Docu'">Docu </xsl:if></span>
                    <b>
                        <xsl:value-of select="@naam" />
                    </b>
                                    <xsl:if test="@teletekst-ondertiteld='ja'"> (TT)</xsl:if>
                                     <xsl:choose>       
                                    <xsl:when test="@net-gemist" >  
                                     Net Gemist  
                                     </xsl:when>      
     <xsl:otherwise>  

     </xsl:otherwise>       
   </xsl:choose>   
                                </div>
                            </td>
                        </xsl:for-each>
                    </tr>
                </xsl:for-each>
            </table>

所以我最终得到一行有四个单元格,另一行有五行。像这样:

  

enter image description here

但是,当一行的单元格多于另一行时,我想自动添加一个额外的空单元格。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

使用此:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="xml">
    <table>
        <xsl:apply-templates select="omroep"/>
    </table>
</xsl:template>

<xsl:template match="omroep">
    <tr>
        <td>
            <xsl:value-of select="@afkorting"/>
        </td>
        <xsl:apply-templates select="programma"/>
        <!-- get maxCount for all 'programma'  -->
        <xsl:variable name="maxCount">
            <xsl:for-each select="//omroep">
                <xsl:sort select="count(programma)" data-type="number" order="descending"/>
                <xsl:if test="position()=1">
                    <xsl:value-of select="count(programma)"/>
                </xsl:if>
            </xsl:for-each>
        </xsl:variable>
        <!-- get current count -->
        <xsl:variable name="currentCount" select="count(programma)"/>
        <!-- generate empty td for each smaller than maxcount -->
        <xsl:for-each
            select="../omroep[programma[position()=$maxCount]][1]/programma[position() &gt; $currentCount]">
            <td/>
        </xsl:for-each>
    </tr>
</xsl:template>

<xsl:template match="programma">
    <td>
        <div class="blauw">
            <xsl:value-of select="@begin-tijd"/>
        </div>
        <div>
            <span class="red">
                <xsl:if test="@type='Reeks'">Reeks </xsl:if>
            </span>
            <span class="red">
                <xsl:if test="@type='Docu'">Docu </xsl:if>
            </span>
            <b>
                <xsl:value-of select="@naam"/>
            </b>
            <xsl:if test="@teletekst-ondertiteld='ja'"> (TT)</xsl:if>
            <xsl:choose>
                <xsl:when test="@net-gemist">  
                    Net Gemist  
                </xsl:when>
                <xsl:otherwise> </xsl:otherwise>
            </xsl:choose>
        </div>
    </td>
</xsl:template>
</xsl:stylesheet>

以此作为来源:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
<omroep>
    <programma></programma>
    <programma></programma>
    <programma></programma>
    <programma></programma>
    <programma></programma>
</omroep>
<omroep>
    <programma></programma>
    <programma></programma>
    <programma></programma>
</omroep>
<omroep>
    <programma></programma>
    <programma></programma>
    <programma></programma>
    <programma></programma>
</omroep>
<omroep>
    <programma></programma>
    <programma></programma>
    <programma></programma>
    <programma></programma>
    <programma></programma>
</omroep>
</xml>

将生成一个表,第二行有2个空td,第3行有1个空td。