Tags:
create new tag
, view all tags

Recipe showing how to Transform a table or set of tables

Sample Tables

Author Title
Rider, Henry Allan and the Holy Flower
Rider, Henry Allan Quatermain
Rider, Henry Allan's Wife
Rider, Henry The Ancient Allan
Campan, Jeanne Louise Henriette Images from Campan's Marie Antoinette
Campan, Jeanne Louise Henriette Marie Antoinette Volume 01
Campan, Jeanne Louise Henriette Marie Antoinette Volume 02
Casanova, Giacomo Memoirs of Casanova Volume 01: Childhood
Casanova, Giacomo Memoirs of Casanova Volume 02: a Cleric in Naples
Casanova, Giacomo Memoirs of Casanova Volume 03: Military Career
Casanova, Giacomo Memoirs of Casanova Volume 04: Return to Venice

Author Title
Poe, Edgar Allan Alone
Poe, Edgar Allan Derniers Contes
Poe, Edgar Allan Edgar Allan Poe's Complete Poetical Works
Poe, Edgar Allan The Fall of the House of Usher

Annotated Query

%XSLTSTART{id="%WEB%" benchmark="off" debug="off" }% 
 <xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <table border="1">
 <tr><th>Title</th><th>Author</th></tr>
 <xsl:apply-templates select="/twiki/web/topic/data/tables/table/row[position()=1]/field[@type='title' and position()=1 and text()='Author']/../../row">
Select each row from all tables that have the first field in the first row equal to 'Title' and of type 'title'. Then apply the template that matchs "row"
     <xsl:sort select="field[2]"/>
Sort each row according to the contents of the second child tag named field
 </xsl:apply-templates>
 </table>
</xsl:template>


<xsl:template match="row">
Executed from the apply-templates tag against each node in the select= list

    <xsl:if test="./field[1][@type='data']">
If this is a data field then output it

    <tr>         
       <td><xsl:value-of select="./field[2]"/></td>
        <td><xsl:value-of select="./field[1]"/></td>
    </tr>
    </xsl:if>

  </xsl:template>
  </xsl:stylesheet>
%XSLTEND%

XSLT Demo Transformed Table

XmlQuery must be Installed for this demo to work. If %XSLTSTART{}% tag appears XmlQueryPugin is not installed

The above tables has been transformed in 3 ways

  1. They have been combined
  2. The Author and Title columns have been swapped
  3. The entries have been sorted by Title

%XSLTSTART{id="Plugins" benchmark="off" debug="off" }% <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:apply-templates select="/twiki/web/topic/data/tables/table/row[position()=1]/field[@type='title' and position()=1 and text()='Author']/../../row"> </xsl:apply-templates>
TitleAuthor

<xsl:value-of select="./field[2]"/> <xsl:value-of select="./field[1]"/>

%XSLTEND%

Edit | Attach | Watch | Print version | History: r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r2 - 2006-02-13 - PatrickDiamond
 
  • Learn about TWiki  
  • Download TWiki
This site is powered by the TWiki collaboration platform Powered by Perl Hosted by OICcam.com Ideas, requests, problems regarding TWiki? Send feedback. Ask community in the support forum.
Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.