So, I need to create a dynamic table using xslt 1.0. I've looked at several articles/posts but I can't seem to put it all together. In many instances, there will be several table cells with empty data. In other instances, there will be multiple values that need to concatenated into one cell. Here is sample XML:
<Document>
<Records>
<User>
<Name>User1</Name>
<list xid="data.set">
<Data>
<Column>2</Column>
<Type>Carbs</Type>
<RowValue>Oatmeal</RowValue>
</Data>
<Data>
<Column>1</Column>
<Type>Protein</Type>
<RowValue>sausage</RowValue>
<RowValue>eggs</RowValue>
<RowValue>turkey</RowValue>
</Data>
</list>
</User>
<User>
<Name>User2</Name>
<list xid="data.set">
<Data>
<Type>Vegetables</Type>
<Column>8</Column>
<RowValue>Squash</RowValue>
</Data>
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>cake</RowValue>
<RowValue>cookies</RowValue>
</Data>
<Data>
<Column>5</Column>
<Type>Other</Type>
</Data>
<Data>
<Column>6</Column>
<Type>Beverage</Type>
<RowValue>grape juice</RowValue>
</Data>
</list>
</User>
<User>
<Name>User4</Name>
<list xid="data.set">
<Data>
<Column>7</Column>
<Type>Fats</Type>
<RowValue>cashews</RowValue>
</Data>
<Data>
<Column>8</Column>
<Type>Vegetables</Type>
<RowValue>Green Beans</RowValue>
</Data>
<Data>
<Column>2</Column>
<Type>Carbs</Type>
<RowValue>Brown Rice</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>apples</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>grapes</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>grapes</RowValue>
</Data>
</list>
</User>
</Records>
</Document>
EDIT : In HTML output there are duplicate values in table cells when the username exists more than once (see below). I would like to remove the duplicate values present in each cell such as "gummy worms, gummy worms, gummy worms." For example, there are three "users5" listed. I would like to keep each row containing "user5" but remove the duplicate values in each of the cells for those row.
<table border="1">
<thead>
<tr>
<th>
</th>
<th>Protein</th>
<th>Carbs</th>
<th>Sweets</th>
<th>Fruit</th>
<th>Other</th>
<th>Beverage</th>
<th>Fats</th>
<th>Vegetables</th>
</tr>
<tr>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
</tr></thead><tbody><tr><th>User1</th>
<td>sausage, eggs, turkey</td>
<td>Oatmeal</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User2</th>
<td></td>
<td></td>
<td>cake, cookies</td>
<td></td>
<td></td>
<td>grape juice</td>
<td></td>
<td>Squash</td>
</tr>
<tr><th>User4</th>
<td></td>
<td>Brown Rice</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>cashews</td>
<td>Green Beans</td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
Here is my VERY feeble attempt at trying to make this work. I'm a newbie, gentle please...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:key name="food-by-Category" match="Data" use="Column" />
<xsl:key name="food-by-Value" match="Columns" use="RowValue" />
<xsl:template match="/Document/Records/User/list[@xid = 'data.set']">
<table><tr>
<xsl:for-each select="Data[count(. | key('food-by-Category', Column)[1]) = 1]">
<!-- Sort by the Category -->
<xsl:sort select="Column" />
<td>
<xsl:value-of select="Type" />
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="Data[count(. | key('food-by-Category', Column)[1]) = 1]">
<tr>
<xsl:for-each select="key('food-by-Category', Column)">
<!-- Sort by the item Value -->
<xsl:sort select="RowValue" />
<td>
<xsl:value-of select="RowValue" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
As you can see it's not grouping the table headers/cells together or concatenating the values when there are multiple < RowValue >.