This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Breaking up is hard to do.


I've got a solution where the number of columns is a parameter, and the last
row is filled with blank <td>'s, but it may be buggy and/or slow (I've not
had the chance to really test it out).

Here's mine - I'd love to see this particular problem have an answer worthy
of an FAQ type question.

Brian



<xsl:template match="parent">
    <xsl:variable name="cols" select="6"/>
    <html:table cellspacing="0" cellpadding="2" border="1"
class="SiteBranchesBackground">
        <xsl:if test="$cols &gt; count(child)">
          <xsl:variable name="cols" select="count(child)"/>
        </xsl:if>
        <xsl:for-each select="child">
          <xsl:if test="position() mod $cols = 1">
            <html:tr>
              <xsl:variable name="firstCellPos" select="position()"/>
              <xsl:for-each select="self::* |
following-sibling::*[position() - ($firstCellPos mod $cols) + 1 &lt;
$cols]">
                <html:td>
                  <html:span>cell</html:span>
                </html:td>
                <!-- LAST ROW EMPTY CELLS: fill in remaining cells (see
below) -->
                <xsl:if test="(position() = last()) and (position() mod
$cols &gt; 0)">
                  <xsl:call-template name="filler_cells"><xsl:with-param
name="cell_count" select="$cols - (position() mod
$cols)"/></xsl:call-template>
                </xsl:if>
              </xsl:for-each>
            </html:tr>
          </xsl:if>
        </xsl:for-each>
    </html:table>
</xsl:template>

<!-- EMPTY CELLS -->
<xsl:template name="filler_cells">
  <xsl:param name="cell_count"/>
  <xsl:if test="$cell_count">
    <html:td>&#160;</html:td>
    <xsl:call-template name="filler_cells">
      <xsl:with-param name="cell_count" select="$cell_count - 1"/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>




> -----Original Message-----
> From: Steve Muench [mailto:smuench@us.oracle.com]
> Sent: Monday, February 21, 2000 9:17 AM
> To: xsl-list@mulberrytech.com
> Subject: Re: Breaking up is hard to do.
> 
> 
> Michael, 
> 
> This is very cool! The best I've seen so far for
> the case when number of columns is fixed.
> 
> The slight tweak of your idea below makes it work
> for a parameterized number of columns, but looses
> the benefit that it fills the last row with empty
> cells. Maybe the idea will come later today to
> have the proverbial cake and eat it, too 
> (or likely, you'll post the solution before then!) :-)
> 
> <xsl:stylesheet 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
> 
> <xsl:param name="max" select="number(3)"/>
> 
> <xsl:template match="field[position() mod $max = 1]" priority="2">
>   <tr>
>     <td><xsl:value-of select="."/></td>
>     <xsl:for-each select="following-sibling::field[$max > 
> position()]">
>       <td><xsl:apply-templates/></td>
>     </xsl:for-each>
>   </tr>
> </xsl:template>
> 
> <xsl:template match="field" priority="1"/>
> 
> </xsl:stylesheet>
> 
> __________________________________________________________
> Steve Muench, Lead XML Evangelist / Consulting Product Mgr
> Oracle Corp, Business Components for Java Development Team
> http://technet.oracle.com/tech/xml
> ----- Original Message ----- 
> From: "Kay Michael" <Michael.Kay@icl.com>
> To: <xsl-list@mulberrytech.com>
> Sent: Monday, February 21, 2000 2:27 AM
> Subject: RE: Breaking up is hard to do.
> 
> 
> | >Attempting to break elements at context node into groups 
> of three for
> | tabular output.
> | 
> | There's another non-recursive approach which I don't think 
> anyone has
> | suggested:
> | 
> | <xsl:template match="field[position() mod 3 = 1]" priority="2">
> |   <tr>
> |     <td><xsl:value-of select="." mode=/></td>
> |     <td><xsl:value-of select="following-sibling::field[1]"/></td>
> |     <td><xsl:value-of select="following-sibling::field[2]"/></td>
> |   </tr>
> | </xsl:template>
> | 
> | <xsl:template match="field" priority="1"/>
> | 
> | this also generates empty <td> elements to fill up the last 
> <tr> row.
> | 
> | Mike Kay
> |  
> | 
> | 
> |  XSL-List info and archive:  
http://www.mulberrytech.com/xsl/xsl-list
| 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]