xsl-list
[Top] [All Lists]

Re: Interesting Table loop

2005-06-09 16:02:30
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(_at_)s-s-t(_dot_)com <JBryant(_at_)s-s-t(_dot_)com> 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="{(_at_)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(_at_)gmail(_dot_)com>
06/09/2005 04:33 PM
Please respond to
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com


To
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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

--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>