it would have been easier if you'd shown the input but guessing..
change
<xsl:when test="contains(@name, 'Outputs')">
to
<xsl:when test="contains(@name, 'Outputs') and
not(ancestor::*[contains(@name,'Outputs')])">
so you only get the first such name (this will search the ancestor list
in quadratic time, but assuming your tree is only a few deep not
thousands that doesn't really matter)
I assume this is left over debuging
<xsl:if test="contains(@name,
'Outputs')"></xsl:if>
as it's always true (as it's inside an xsl:when with the same test) and
doesn't do anything.
David
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list