posto il codice per coloro che hanno o avranno lo stesso problema.
esso permette di gerarchizzare i dati provenienti dal db nel classico formato xml a righe e trasformarlo in un albero.

codice:
<xsl:template match="rs:data">
	<xsl:for-each select="//rs:data/z:row[not(@COD_ABI = preceding-sibling::z:row/@COD_ABI)]/@COD_ABI">
		<xsl:variable name="curr_abi" select="current()"/>
		<tr>
			<td class="Costanti" align="center" valign="top">
			

			<xsl:value-of select="current()"/>
			</td>
			<td colspan="2" valign="top">
			

			<xsl:for-each select="//rs:data/z:row[not(@ID_ESITO = preceding-sibling::z:row[@COD_ABI = $curr_abi]/@ID_ESITO) and (@COD_ABI = $curr_abi)]/@ID_ESITO">
				<xsl:variable name="classeRiga">
					<xsl:choose>
						<xsl:when test="position() mod 2 = 1">odd</xsl:when>
					<xsl:otherwise>even</xsl:otherwise>
					</xsl:choose>
				</xsl:variable>
				<table width="100%" cellspacing="0">
					<tr class="{$classeRiga}">
						<td class="Costanti">
							<xsl:value-of select="../@ESITO"/>&#160;
						</td>
						<td class="Costanti" align="center" width="50">
							<span style="color: red;font-weight:bold;"><xsl:value-of select="count(/xml/rs:data/z:row[@ID_ESITO = current() and @COD_ABI = $curr_abi])"/></span>
						</td>
					</tr>
				</table>
			</xsl:for-each>
			</td>
		</tr>
	</xsl:for-each>
</xsl:template>