xsl-list
[Top] [All Lists]

Re: Beginner-Problem

2002-11-22 04:33:13
Hi Sorin,


<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output method="text"/>
 <xsl:template match="energyreport">
  <xsl:for-each select="energyconsumption"> <!-- Line 1 -->
   <xsl:value-of select="@year"/>
   <xsl:text>&#xa;</xsl:text>
  </xsl:for-each>
  <xsl:for-each select="//terajoule[not(@energy =
preceding::terajoule/@energy)]"><!-- line 2 -->
   <xsl:variable name = "energy" select="@energy"/> <!--  Line 3 store the
atribute energy in a variable called "energy" -->
   <xsl:value-of select="$energy"/><!-- line 4-->
   <xsl:text>&#xa;</xsl:text>
   <xsl:apply-templates
select="/energyreport/energyconsumption/terajoule[(_at_)energy =$energy]"/><!--
line 5-->
  </xsl:for-each>
 </xsl:template>
 <xsl:template match = "terajoule">
  <xsl:value-of select="."/>
  <xsl:text>&#xa;</xsl:text>
 </xsl:template>
</xsl:stylesheet>

The explanation is as follows
line1 goes through each energyconsumption elements and outputs the year.
 <xsl:text>&#xa;</xsl:text> is for printing the newline.
 output :
   1970
   1980
Line 2 is for grouping the data based on the energy atribute.
Line 2 collects all the Unique energy atributes.
This can also be done using keys ( muenchean method)
So in your case you have Oil,Gaz and Coal evertime the for-each runs.
Line 3 Prints the Energy Attribute
Line 4 Calls the Template to match the terajoule element applying the
predicate that the attribute energy is equal to the value of variable
"enerygy" of liine 3
In other words we are trying to  group the terajoule elements of same
attribute value together. So in your case this will first group all
terajoule elements with energy = Oil,
then Gaz and then Coal.
so your output will look like
1970
1980
Oil
2222
9222
Gaz
3333
9333
Coal
4444
9444
which is what you wanted..
HTH
----- Original Message -----
From: "Sorin Marti" <mas(_at_)semafor(_dot_)ch>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Friday, November 22, 2002 10:32 AM
Subject: [xsl] Beginner-Problem


Hi all,

I am new to XSL and I am experimenting around... I've got an XML-File
with the following structure

<energyreport>

<energyconsumption year="1970">
   <terajoule energy="Oil">2222</terajoule>
   <terajoule energy="Gaz">3333</terajoule>
   <terajoule energy="Coal">4444</terajoule>
</energyconsumption>

<energyconsumption year="1980">
   <terajoule energy="Oil">9222</terajoule>
   <terajoule energy="Gaz">9333</terajoule>
   <terajoule energy="Coal">9444</terajoule>
</energyconsumption>

[and so on...]

</energyreport>

I want to get out following structure, as simple text output (it is for
a LaTeX-File):


            1970  1980
Oil      2222  9222
Gaz     3333  9333
Coal    4444 9444


How to make that work? I tried this:

<xsl:template match="/">
  <xsl:for-each select="/energyreport/energyconsumption">
     <xsl:value-of select="@year"/>
 </xsl:for-each>
</xsl:template>

That gives out the years, that's fine... but how to select the
energy-attribute (only once each)?

Every advice apreciated

Thanks in advance

Sorin Marti



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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