This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: xsl structuring....
- To: "'xsl-list at mulberrytech dot com'" <xsl-list at mulberrytech dot com>
- Subject: RE: xsl structuring....
- From: Ben Robb <Ben at cscape dot com>
- Date: Tue, 3 Oct 2000 00:56:38 +0100
- Reply-To: xsl-list at mulberrytech dot com
There is certainly a more elegant way than the one I've just hacked out;
however, it gives the correct answer, and given it is nearly one o'clock in
the morning, I'm going to call it a night at this:
The trick lies in getting a nodeset containing all of the required "name"
tags, and then using the "preceding" axis in XPath to do what a "DISTINCT"
statement in SQL does...
Hope this helps,
Ben
<table>
<xsl:for-each select="//name[../../desRow or ../../asRow]">
<xsl:sort select="text()"/>
<xsl:variable name="thisVal" select="text()"/>
<xsl:if test="not(../preceding::name = $thisVal)">
<tr>
<td><xsl:value-of select="text()"/></td>
<td><xsl:choose>
<xsl:when test="not(/History/des/desRow[name/text()
= $thisVal]/qty/text())">-</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="/History/des/desRow[name/text() = $thisVal]/qty/text()"/>
</xsl:otherwise>
</xsl:choose>
</td>
<td><xsl:choose>
<xsl:when test="not(/History/asis/asRow[name/text()
= $thisVal]/qty/text())">-</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="/History/asis/asRow[name/text() = $thisVal]/qty/text()"/>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list