xsl-list
[Top] [All Lists]

RE: FW: xsl code to create tables of different number columns and rows

2005-05-20 08:57:08
Martie,

columns, and in the second table 2. Throughout the book there can be a number of tables with different amount of columns/rows. Thus, I have to create a template that can interpret the cols="?" attribute and for each instance create a table with that amount of columns.

If your data is consistent this is simple. However this may be an unsafe assumption. At some point you may also want/need to handle cases in which the number of <entry> doesn't match number of <colspec>.

I am not good (yet) with xml or html. If I create an html table first, how do I then apply the tgroup/@cols to that?

Hopefully this will help along your way to proficiency:

This XML (yours corrected to have a single overall containing element):

<data>
   <table>
       <tgroup cols="3">
           <colspec colname="col1"/>
           <colspec colname="col2"/>
           <colspec colname="col3"/>
           <tbody>
               <row>
                   <entry>column1rowa</entry>
                   <entry>column2rowa</entry>
                   <entry>column3rowa</entry>
               </row>
               <row>
                   <entry>column1rowb</entry>
                   <entry>column2rowb</entry>
                   <entry>column3rowb</entry>
               </row>
           </tbody>
       </tgroup>
   </table>
   <table>
       <tgroup cols="2">
           <colspec colname="col1"/>
           <colspec colname="col2"/>
           <tbody>
               <row>
                   <entry>column1rowa</entry>
                   <entry>column2rowa</entry>
               </row>
               <row>
                   <entry>column1rowb</entry>
                   <entry>column2rowb</entry>
               </row>
               <row>
                   <entry>column1rowc</entry>
                   <entry>column2rowc</entry>
               </row>
           </tbody>
       </tgroup>
   </table>
</data>

With this XSL:

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

   <xsl:template match="/">
       <data>
       <xsl:apply-templates select="data/table"/>
       </data>
        </xsl:template>

   <xsl:template match="table">
       <table>
           <tr>
           <xsl:apply-templates select="tgroup/colspec"/>
           </tr>
           <xsl:apply-templates select="tgroup/tbody/row"/>
       </table>
        </xsl:template>

   <xsl:template match="row">
       <tr>
           <xsl:apply-templates select="entry"/>
       </tr>
        </xsl:template>

   <xsl:template match="colspec">
       <th><xsl:value-of select="@colname"/></th>
        </xsl:template>

   <xsl:template match="entry">
       <td><xsl:value-of select="."/></td>
        </xsl:template>

</xsl:stylesheet>

produces:

<?xml version="1.0" encoding="UTF-8"?>
<data>
 <table>
   <tr>
     <th>col1</th>
     <th>col2</th>
     <th>col3</th>
   </tr>
   <tr>
     <td>column1rowa</td>
     <td>column2rowa</td>
     <td>column3rowa</td>
   </tr>
   <tr>
     <td>column1rowb</td>
     <td>column2rowb</td>
     <td>column3rowb</td>
   </tr>
 </table>
 <table>
   <tr>
     <th>col1</th>
     <th>col2</th>
   </tr>
   <tr>
     <td>column1rowa</td>
     <td>column2rowa</td>
   </tr>
   <tr>
     <td>column1rowb</td>
     <td>column2rowb</td>
   </tr>
   <tr>
     <td>column1rowc</td>
     <td>column2rowc</td>
   </tr>
 </table>
</data>

You may want to make changes to this, starting with changing the output type to "html".

Regards,

--A

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar ? get it now! http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>