You are here: Foswiki>System Web>XMLQueryPlugin>XmlQueryPluginRecipe3 (28 Feb 2006, PatrickDiamond)Edit Attach

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 1 The Author and Title columns have been swapped 1 The entries have been sorted by Title

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

TitleAuthor

%XSLTEND%
Topic revision: r10 - 28 Feb 2006, PatrickDiamond
This site is powered by FoswikiCopyright &© by the contributing authors. All material on this site is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback