Mega Code Archive

 
Categories / XML Tutorial / XSLT StyleSheet
 

For-each-group select=makemodel group-ending-with=[position() mod 3 = 0]

File: Data.xml <?xml version="1.0"?> <!-- carlist.xml --> <cars>   <make>Alfa Romeo</make>   <make>Bentley</make>   <make>Chevrolet</make>   <make>Dodge</make>   <make>Eagle</make>   <make>Ford</make>   <make>GMC</make> </cars> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="2.0"    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">   <xsl:output method="html" include-content-type="no"/>   <xsl:template match="/">     <html>       <head>         <title>Car Makes and Models</title>       </head>       <body>         <h1>Car Makes and Models</h1>         <paragraph>Here are the car makes and models in          our input document.</p>         <table border="1" cellpadding="5">           <xsl:apply-templates select="cars"/>         </table>       </body>     </html>   </xsl:template>   <xsl:template match="cars">     <xsl:for-each-group select="make|model" group-ending-with="*[position() mod 3 = 0]">       <tr>         <xsl:apply-templates select="current-group()"/>         <xsl:if test="count(current-group()) lt 3">           <td style="background: #CCCCCC;"             colspan="{3 - count(current-group())}">           </td>         </xsl:if>       </tr>     </xsl:for-each-group>   </xsl:template>   <xsl:template match="make">     <td>       <xsl:apply-templates/>     </td>   </xsl:template>   <xsl:template match="model">     <td style="font-style: italic; font-weight: bold;">       <xsl:apply-templates/>     </td>   </xsl:template>    </xsl:stylesheet> Output: <html>    <head>       <title>Car Makes and Models</title>    </head>    <body>       <h1>Car Makes and Models</h1>       <paragraph>Here are the car makes and models in           our input document.       </p>       <table border="1" cellpadding="5">          <tr>             <td>Alfa Romeo</td>             <td>Bentley</td>             <td>Chevrolet</td>          </tr>          <tr>             <td>Dodge</td>             <td>Eagle</td>             <td>Ford</td>          </tr>          <tr>             <td>GMC</td>             <td style="background: #CCCCCC;" colspan="2"></td>          </tr>       </table>    </body> </html>