Re: [xsl] Creating Columnar Table format with XML data

Subject: Re: [xsl] Creating Columnar Table format with XML data
From: Kenneth Stephen <marvin.the.cynical.robot@xxxxxxxxx>
Date: Sun, 14 Aug 2005 10:17:07 -0500
Maria,

    Example implementation :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="1.0"
	xmlns:exsl-common="http://exslt.org/common";
	extension-element-prefixes="exsl-common">

	<xsl:variable name="var">
		<column title="Capital Markets">
			<bullet ID="1">
				<tip>This is the first tip for Capital Markets.</tip>
			</bullet>
			<bullet ID="2">
				<tip>This is the second tip for Capital Markets</tip>
			</bullet>
		</column>
		<column title="Environment Industry and Company Markets">
			<bullet ID="3">
				<tip>This is the first tip for Environment, Industry and Company
Markets.</tip>
			</bullet>
		</column>
	</xsl:variable>

	<xsl:template match="/">
		<xsl:variable name="input-data" select="exsl-common:node-set($var)" />
		<table>
			<tr>
				<xsl:apply-templates select="$input-data" mode="titles" />
			</tr>
			<xsl:choose>
				<xsl:when test="count($input-data/column[1]/bullet) &gt;
count($input-data/column[2]/bullet)">
					<xsl:for-each select="$input-data/column[1]/bullet">
						<tr>
							<td><xsl:apply-templates select="." /></td>
							<xsl:variable name="current-pos"
select="count(preceding-sibling::bullet) + 1" />
							<td><xsl:apply-templates
select="$input-data/column[2]/bullet[$current-pos]" /></td>
						</tr>
					</xsl:for-each>
				</xsl:when>
				<xsl:otherwise>
					<xsl:for-each select="$input-data/column[2]/bullet">
						<tr>
							<td><xsl:apply-templates select="." /></td>
							<xsl:variable name="current-pos"
select="count(preceding-sibling::bullet) + 1" />
							<td><xsl:apply-templates
select="$input-data/column[1]/bullet[$current-pos]" /></td>
						</tr>
					</xsl:for-each>
				</xsl:otherwise>
			</xsl:choose>
		</table>
	</xsl:template>

	<xsl:template match="column" mode="titles">
		<td><xsl:value-of select="@title" /></td>
	</xsl:template>

</xsl:stylesheet>

    In your case, you are probably using a separate input file for
your data, you wont need to use the node-set functions like I have.

Regards,
Kenneth

On 8/13/05, Maria Leggett <maria@xxxxxxxxxxxxxx> wrote:
> I have an xml file that I need to create into a columnar table format.  I
> can't figure out how to group the data to display in a column when not all
> the column rows cells will contain data. I am using XSL 1.0
>
> sample xml is:
>
>   <column title="Capital Markets">
>    <bullet ID="1">
>      <tip>This is the first tip for Capital Markets.</tip>
>    </bullet>
>    <bullet ID="2">
>     <tip>This is the second tip for Capital Markets</tip>
>    </bullet>
>      </column>
>   <column title="Environment Industry and Company Markets">
>    <bullet ID="3">
>    <tip>This is the first tip for Environment, Industry and Company
> Markets.</tip>
>    </bullet>
>   </column>
>
> The html output should look something like this:
> <table>
> <tr>
> <td>Capital Markets</td>
> <td>Environment, Industry and Company Markets</td>
> </tr>
> <tr>
> <td>This is the first tip for Capital Markets</td>
> <td>This is the first tip for Environment, Industry and Company
Markets</td>
> </tr>
> <tr>
> <td>This is the second tip for Capital Markets</td>
>
> <td></td>
> </tr>
> </table>
>
> Thank you for any help.

Current Thread