|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Show a column only if the total is not zero
> > I would like the report on the project to look like
> > this.
> >
> > name fees travel
> > Adam 134.25 39.25
> > Brian 172.50 52.75
> > Chris 103.75 0.00
> > Total 410.50 92.00
> >
> > There was no overtime on this project so I don't
> > want it shown. I should
> > be most grateful for any suggestions on the best way
> > to show the columns
> > where the total is not zero. (In practice I have
> > more than 3 types of
> > cost.)
Here's my attempt - it indexes the xml on position (to group by column)
then for each cell checks the column for a number.
It using the fact that number(0.00) returns false (but will return true
if any in the sequence are positive), and 'not(. - 1)' will return true
when '.' is a string.
I'm not happy with the 'not(. - 1)' so if anyone can point out a better
test that would be good.
This stylesheet:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="cols" match="person/*"
use="count(preceding-sibling::*|.)"/>
<xsl:template match="/root">
<table>
<thead>
<xsl:for-each select="person[1]/*">
<xsl:if test="not(. - 1) or number(key('cols',position()))">
<th><xsl:value-of select="local-name()"/></th>
</xsl:if>
</xsl:for-each>
</thead>
<tbody>
<xsl:apply-templates/>
</tbody>
</table>
</xsl:template>
<xsl:template match="person">
<tr>
<xsl:for-each select="*">
<xsl:if test="not(. - 1) or number(key('cols',position()))">
<td><xsl:value-of select="."/></td>
</xsl:if>
</xsl:for-each>
</tr>
</xsl:template>
</xsl:stylesheet>
Applied to this xml:
<root>
<person>
<name>Adam</name>
<fees>134.25</fees>
<overtime>0.00</overtime>
<travel>39.25</travel>
</person>
<person>
<name>Brian</name>
<fees>172.50</fees>
<overtime>0.00</overtime>
<travel>52.75</travel>
</person>
<person>
<name>Chris</name>
<fees>103.75</fees>
<overtime>0.00</overtime>
<travel>0.00</travel>
</person>
</root>
Gives this result:
<?xml version="1.0" encoding="UTF-8"?>
<table>
<thead>
<th>name</th>
<th>fees</th>
<th>travel</th>
</thead>
<tbody>
<tr>
<td>Adam</td>
<td>134.25</td>
<td>39.25</td>
</tr>
<tr>
<td>Brian</td>
<td>172.50</td>
<td>52.75</td>
</tr>
<tr>
<td>Chris</td>
<td>103.75</td>
<td>0.00</td>
</tr>
</tbody>
</table>
cheers
andrew
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








