[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Interesting Table loop

Subject: Re: Interesting Table loop
From: Spencer Tickner <spencertickner@xxxxxxxxx>
Date: Thu, 9 Jun 2005 16:02:30 -0700
aid ccols
Hi Jay,

Thanks for the post. The code's poetry. i can see I'm going to have to
do a little work with the colspans and empty cells but other than
that, worked like a charm.

Great Post!,

Spencer



On 6/9/05, JBryant@xxxxxxxxx <JBryant@xxxxxxxxx> wrote:
> Hi, Spencer,
>
> How about:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="html" omit-xml-declaration="no" indent="yes"/>
>
>   <xsl:template match="/">
>     <html>
>       <body>
>         <xsl:apply-templates/>
>       </body>
>     </html>
>   </xsl:template>
>
>   <xsl:template match="Table">
>     <table border="1">
>       <!-- Make the header row -->
>       <tr>
>         <xsl:for-each select="Cell[qp_table_numeric_head]">
>           <xsl:apply-templates select="."/>
>         </xsl:for-each>
>       </tr>
>       <!-- Make the body rows -->
>         <xsl:for-each-group
> select="Cell[qp_table_numeric_body]|Cell[qp_table_numeric_data]"
> group-starting-with="Cell[qp_table_numeric_body]">
>           <tr>
>             <xsl:apply-templates select="current-group()/self::*"/>
>           </tr>
>         </xsl:for-each-group>
>       <!-- Make the footnote -->
>       <tr>
>         <xsl:for-each select="Cell[qp_table_numeric_footnote]">
>           <xsl:apply-templates select="."/>
>         </xsl:for-each>
>       </tr>
>     </table>
>   </xsl:template>
>
>   <xsl:template match="Cell[qp_table_numeric_head]">
>     <th>
>       <xsl:apply-templates/>
>     </th>
>   </xsl:template>
>
>   <xsl:template
> match="Cell[qp_table_numeric_body]|Cell[qp_table_numeric_data]">
>     <td>
>       <xsl:apply-templates/>
>     </td>
>   </xsl:template>
>
>   <xsl:template match="Cell[qp_table_numeric_footnote]">
>     <td colspan="{@ccols}">
>       <xsl:apply-templates/>
>     </td>
>   </xsl:template>
>
>   <xsl:template
>
match="qp_table_numeric_head|qp_table_numeric_body|qp_table_numeric_data|qp_t
able_numeric_footnote">
>     <xsl:value-of select="."/>
>   </xsl:template>
>
> </xsl:stylesheet>
>
> I assumed that the only thing that actually spanned columns would be
> footnotes. I bet you can add spanning if you need to, though. Also, this
> will break if the first data value in each row is not a
> qp_table_numeric_body node.
>
> To test this, I extended your data set to have two body rows and ran it
> through Saxon 8.4. I got what I expected. (Minor issue: You might want to
> fiddle with normalize-space a bit, as this stylesheet inserts spaces and
> linebreaks quite a bit - a consequence of trying to make a readable
> stylesheet.)
>
> I love for-each-group.
>
> Jay Bryant
> Bryant Communication Services
> (presently consulting at Synergistic Solution Technologies)
>
>
>
> Spencer Tickner <spencertickner@xxxxxxxxx>
> 06/09/2005 04:33 PM
> Please respond to
> xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>
>
> To
> xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> cc
>
> Subject
>  Interesting Table loop
>
>
>
>
>
>
> Hi everyone,
>
> Thanks in advance for the help. I have a table comming out of another
> program, I have to turn it into a html table. Using xslt 2.0.
>
> So far I have tried recursively calling 2 templates representing the
> rows and column counts of tables. Of course, because these have no
> reference to the original table (there is more than 1 in each
> document), I cannot acurately grab the content. Here is the xml:
>
> <Table xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
> aid:table="table" aid:trows="3" aid:tcols="7">
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1"
> aid:ccolwidth="192">
>
> <qp_table_numeric_head>Performance Measure</qp_table_numeric_head>
>  </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>
> <qp_table_numeric_head>2001/02Actual</qp_table_numeric_head>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>
> <qp_table_numeric_head>2002/03Actual</qp_table_numeric_head>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>
> <qp_table_numeric_head>2003/04Actual</qp_table_numeric_head>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>
> <qp_table_numeric_head>2004/05Target</qp_table_numeric_head>
>  </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>
> <qp_table_numeric_head>2004/05Actual</qp_table_numeric_head>
>  </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>             <qp_table_numeric_head>2004/05
> Variance</qp_table_numeric_head>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1"
> aid:ccolwidth="192">
>
> <qp_table_numeric_body>2.2Percentage of total
> caseload.</qp_table_numeric_body>
>  </Cell>
>
>  <Cell aid:table="cell" aid:crows="1" aid:ccols="1"
> aid:ccolwidth="50">
>
> <qp_table_numeric_data>28.4%</qp_table_numeric_data>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>     <qp_table_numeric_data>35.4%</qp_table_numeric_data>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>
> <qp_table_numeric_data>43.3%</qp_table_numeric_data>
> </Cell>
>
>  <Cell aid:table="cell" aid:crows="1" aid:ccols="1"
> aid:ccolwidth="50">
>
> <qp_table_numeric_data>46.0%</qp_table_numeric_data>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>       <qp_table_numeric_data>49.8%</qp_table_numeric_data>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="50">
>
>        <qp_table_numeric_data>+3.8%</qp_table_numeric_data>
> </Cell>
>
> <Cell aid:table="cell" aid:crows="1" aid:ccols="7">
> <qp_table_numeric_footnote>Source: Planning.</qp_table_numeric_footnote>
> </Cell>
>
>  </Table>
>
>
> So I here's the pseudo xslt I figure should make the table.
>
> <xsl:template match="table"/>
>   <!-- Loop until you get to the end of @aid:trows -->
>   <tr>
>       <!-- Loop until you get to the end of @aid:tcols -->
>         <td><xsl:apply-templates select="Cell"/></td>
>        <!-- End col loop -->
>   </tr>
>   <!-- End row loop -->
> </xsl:template>
>
> I'm kinda perplexed by how to do this, any suggestions, or if another
> way jumps out at you, I'd be very gratefull for the advice. As a side
> note, @aid:ccols in the Cell attribute seem to represent colspan.
>
> Spencer

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.