xsl-list
[Top] [All Lists]

[xsl] Problems with following-sibling

2007-07-04 08:10:37
Hi.

I'm working on a project where I have to generate a line graph (using SVG) from 
an XML-file generated by a program. 
For example the XML-file can look like this (generated by the program):

<cars>
     <cartype>Sports cars</cartype>
     <active>true</active>
      <car>
        <name>Ferrari Enzo</name>
        <price>750000</price>
        <date>2007-05-21</date>
        <volume>15</volume>
      </car>
      <car>
        <name>Ferrari Enzo</name>
        <price>750000</price>
        <date>2007-06-13</date>
        <volume>19</volume>
      </car>
      <car>
        <name>Porsche Carrera GT</name>
        <price>600000</price>
        <date>2007-06-13</date>
        <volume>11</volume>
      </car>
      <car>
        <name>Ferrari Enzo</name>
        <price>750000</price>
        <date>2007-06-22</date>
        <volume>13</volume>
      </car>
      <car>
        <name>Bugatti Veyron</name>
        <price>15000000</price>
        <date>2007-06-22</date>
        <volume>4</volume>
      </car>
</cars>

The graph's y-axis holds the volume amount and the x-axis holds the date.
The idea is that the graph generates different color line graphs based on the 
name of the car, so to address this I've written an XSLT-file. 

Here is a snippet from the XSL-file:

<g transform="translate(60,400)">
 <xsl:for-each select="car[name = 'Ferrari Enzo']">
 <xsl:variable name="nextVolume" select="following-sibling::car/volume"/>
   <line x1="{position()*15}" y1="-{volume} " x2="{(position()+1)*15}" 
y2="-{$nextVolume}" style="stroke: red;"/>
</xsl:for-each>
</g>

Here is the problem: When I try to get the "nextVolume" with 
"following-sibling::car/volume" it works fine if the next car is a Ferrari, but 
as you can see the cars can be at any order in the xml-file.
I've selected specifically the Ferraris with the "for-each", but how do I 
select the following sibling so that it also matches the car name?
The <xsl:variable name="nextVolume" select="following-sibling::car/volume"/> 
itself doesn't work since it doesn't seem to skip the Porsche's value, which is 
between the Ferraris. Any help is greatly appreciated.

...................................................................
Luukku Plus paketilla pääset eroon tila- ja turvallisuusongelmista.
Hanki Luukku Plus ja helpotat elämääsi. http://www.mtv3.fi/luukku


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>