Dom I Nic
Dom I Nic

Reputation: 71

Two-column table layout (XSLT)

Consider the following XML code:

<tip>
    <number>1</number>
    <number>2</number>
    <number>3</number>
    <number>4</number>
    <number>5</number>
</tip>

I want to have an HTML output like this:

<table>
    <tr>
        <td><number>1</number></td>
        <td><number>2</number></td>
    </tr>
    <tr>
        <td><number>3</number></td>
        <td><number>4</number></td>
    </tr>
    <tr>
        <td><number>5</number></td>
    </tr>
</table>

I am just new in XSL, I hope someone can help me with this one.

Upvotes: 2

Views: 1745

Answers (1)

Daniel Haley
Daniel Haley

Reputation: 52858

You could do this with mod (modulo).

XML Input

<tip>
    <number>1</number>
    <number>2</number>
    <number>3</number>
    <number>4</number>
    <number>5</number>
</tip>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="tip">
        <table>
            <xsl:apply-templates select="number[not(position() mod 2 = 0)]"/>
        </table>
    </xsl:template>

    <xsl:template match="number">
        <tr>
            <td><xsl:value-of select="."/></td>
            <td><xsl:value-of select="(following-sibling::number)[1]"/></td>
        </tr>
    </xsl:template>

</xsl:stylesheet>

Output

<table>
   <tr>
      <td>1</td>
      <td>2</td>
   </tr>
   <tr>
      <td>3</td>
      <td>4</td>
   </tr>
   <tr>
      <td>5</td>
      <td/>
   </tr>
</table>

Upvotes: 3

Related Questions