My solution assumes @field='file' is a mandatory field, i.e. won't be
missing. The gist of it is, the number of @field='file' <data> elements
above a given <data section='changes'> must equal the position() of the
//data[(_at_)field='file'] that triggered the xsl:apply-templates.
-Eric
<?xml version='1.0' encoding='utf-8'?>
<server-manifest>
<category-source>
<interface-categories>
<data section='diff'>if (reportService != null)</data>
<data section='diff'>return true;</data>
<data section='diff'>return false;</data>
<data section='changes' field='file'>ConvertHistoryWages.java</data>
<data section='changes'
field='version'>\main\spr2010_apr_dev\2</data>
<data section='changes' field='date'>20100310.102844</data>
<data section='changes' field='user'>jryan</data>
<data section='changes' field='cr_number'>602018</data>
<data section='changes' field='comment'>fix for log 5960</data>
<data section='diff'>1296a1297,1298</data>
<data section='diff'></data>
<data section='diff'>if (reportService != null)</data>
<data section='diff'>return true;</data>
<data section='diff'>return false;</data>
<data section='changes' field='file'>HistoryWages.java</data>
<data section='changes'
field='version'>\main\spr2009_apr_dev\2</data>
<data section='changes' field='date'>20090310.102844</data>
<data section='changes' field='cr_number'>602118</data>
<data section='changes' field='comment'>fix for log 6950</data>
<data section='diff'>1296a1297,1298</data>
<data section='diff'></data>
<data section='diff'>if (reportService != null)</data>
<data section='diff'>return true;</data>
<data section='diff'>return false;</data>
<data section='changes' field='file'>Wages.java</data>
<data section='changes' field='date'>20080310.102844</data>
<data section='changes' field='user'>ryanj</data>
<data section='changes' field='cr_number'>602218</data>
<data section='diff'>1296a1297,1298</data>
<data section='diff'></data>
</interface-categories>
</category-source>
</server-manifest>
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0'
xmlns='http://www.w3.org/1999/xhtml'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output omit-xml-declaration='no' method='xml' indent='yes'
xml:space='default' encoding='utf-8'/>
<xsl:template match='/'>
<html xml:lang='en'>
<head>
<title>table example</title>
<style
type='text/css'>table{table-layout:fixed;width:auto}</style>
</head>
<body>
<table width='0' summary='summary goes here for accessibility'>
<caption>caption goes here for accessibility</caption>
<thead>
<tr>
<td> </td>
<th>Version</th>
<th>Date</th>
<th>User</th>
<th>CR Number</th>
<th>Comment</th>
</tr>
</thead>
<tfoot><!-- optional -->
<tr>
<td> </td>
<th>Version</th>
<th>Date</th>
<th>User</th>
<th>CR Number</th>
<th>Comment</th>
</tr>
</tfoot>
<tbody><xsl:apply-templates
select="//data[(_at_)field='file']"/></tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:template match='data'>
<xsl:param name='i' select='position()'/>
<tr>
<th><xsl:value-of select='.'/></th>
<td><xsl:value-of
select="following-sibling::data[(_at_)field='version' and
count(preceding-sibling::data[(_at_)field='file'])=$i]"/> </td>
<td><xsl:value-of
select="following-sibling::data[(_at_)field='date' and
count(preceding-sibling::data[(_at_)field='file'])=$i]"/> </td>
<td><xsl:value-of
select="following-sibling::data[(_at_)field='user' and
count(preceding-sibling::data[(_at_)field='file'])=$i]"/> </td>
<td><xsl:value-of
select="following-sibling::data[(_at_)field='cr_number' and
count(preceding-sibling::data[(_at_)field='file'])=$i]"/> </td>
<td><xsl:value-of
select="following-sibling::data[(_at_)field='comment' and
count(preceding-sibling::data[(_at_)field='file'])=$i]"/> </td>
</tr>
</xsl:template>
</xsl:stylesheet>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--