Subject: Re: [xsl] Interesting Table loop From: JBryant@xxxxxxxxx Date: Thu, 9 Jun 2005 17:32:16 -0500 |
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_table_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 [xsl] 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Interesting Table loop, Spencer Tickner | Thread | Re: [xsl] Interesting Table loop, Spencer Tickner |
Re: [xsl] How does one convert an R, David Carlisle | Date | Re: [xsl] Interesting Table loop, Spencer Tickner |
Month |