RE: [xsl] Trouble creating tables while looping through elements

Subject: RE: [xsl] Trouble creating tables while looping through elements
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 10 May 2010 10:13:21 +0100
Wrong approach: XSLT stylesheets produce a tree as the output, not lexical
XML; XSLT instructions create nodes on the tree, not tags in the serialized
XML.  So you can't write end tags and start tags as separate operations.

This is a grouping problem and in XSLT 2.0 you can write

<xsl:for-each-group select="node" group-by="subnode">
  <xsl:sort select="current-grouping-key()"/> 
  <table>
    <xsl:for-each-select="current-group()">
       ....
    </
  </
</

It's more tricky to achieve if you're stuck with XSLT 1.0: search for
"Muenchian Grouping". The code is rather confusing, but not difficult once
you understand it.

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 

> -----Original Message-----
> From: Charles-Louis De Maere 
> [mailto:charles-louis.demaere@xxxxxxxxxxxxxxx] 
> Sent: 10 May 2010 09:14
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Trouble creating tables while looping through elements
> 
> Dear all,
> 
> I'm looping through a (sorted) list of nodes, and would like 
> to put them in different tables based on a certain condition 
> using xslt.
> 
> At the moment, I'm doing the following :
> 
> <table>
> <xsl:for-each select="node">
> <tbody>
>          ... some formatting ...
> </tbody>
> <xsl:if test="not(subnode = following-sibling::node/subnode)">
> </table>
> <h2>Some Title</h2>
> <table>
> </xsl-if>
> </xsl:for-each>
> </table>
> 
> However, this XSLT file is invalid (XMLSpy indicates a 
> warning when I save it, because of the closing <table> tag 
> underneath the if-test), and Firefox refuses to display it 
> for the same reason.
> 
> Is there any easy way to have some kind of separation within 
> the for-each loop, or should I take this formatting out of the loop ?
> 
> 
> Thanks in advance,
> 
> Charles-Louis de Maere

Current Thread