[no subject]

For instance, I have the following XML data:

<food>
  <item type="fruit" name="apple" rotten="6" total="10"/>
  <item type="fruit" name="orange" rotten="2" total="10"/>
  <item type="fruit" name="pear" rotten="1" total="4"/>
  <item type="vegetable" name="carrot" rotten="0" total="5"/>
  <item type="vegetable" name="potato" rotten="1" total="2"/>
</food>

To which I apply a stylesheet to get a nice table output. I know how to get 
to overall sums, but I don't know how to get the group/inner sums (denoted 
by '?'):

type	name	rotten	total	percent
fruit
	apple	6	10	60
	orange	2	10	20
	pear	1	4	25
	total	?	?	?
vegetable
	carrot	0	5	0
	potato	1	2	50
	total	?	?	?
total		10	31	32.3

Here are some assumptions that can be made about the data:
* The items are guaranteed to be sorted by the "type" attribute.
* I don't know the possible values of "type" beforehand.
* Its format cannot be changed.

Also:
* I am using XSLT 1.0, but upgrading to 2.0 might be possible (I'm not 
sure).
* I am using python 2.4 with libxml2 and libxslt.

Here's the stylesheet I have now (that generated the above table):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
	<xsl:template match="/">
    <html><body><table>
    <tr>
      <td>type</td>
      <td>name</td>
      <td>rotten</td>
      <td>total</td>
      <td>percent</td>
    </tr>

    <xsl:for-each select="//item">
      <xsl:if test="not(preceding-sibling::*[1]/@type=@type)">
        <tr><td><xsl:value-of select="@type"/></td></tr>
      </xsl:if>

      <tr>
        <td></td>
        <td><xsl:value-of select="@name"/></td>
        <td><xsl:value-of select="@rotten"/></td>
        <td><xsl:value-of select="@total"/></td>
        <td><xsl:value-of select="format-number(@rotten div @total * 
100,'##.#')"/></td>
      </tr>

      <xsl:if test="not(following-sibling::*[1]/@type=@type)">
        <tr>
          <td></td>
          <td>total</td>
          <td>?</td>
          <td>?</td>
          <td>?</td>
        </tr>
      </xsl:if>
    </xsl:for-each>

    <tr>
      <td>total</td>
      <td></td>
      <td><xsl:value-of select="sum(//item/@rotten)"/></td>
      <td><xsl:value-of select="sum(//item/@total)"/></td>
      <td><xsl:value-of select="format-number(sum(//item/@rotten) div 
sum(//item/@total) * 100,'##.#')"/></td>
    </tr>
    </table></body></html>
	</xsl:template>
</xsl:stylesheet>

Thank you,
DB 

Current Thread