Reputation: 71
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
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