Re: [xsl] grouping questions

Subject: Re: [xsl] grouping questions
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Wed, 4 Aug 2004 21:40:33 -0700 (PDT)
Hi Xiang,
  Please try this XSL -

<?xml version="1.0"?> 
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
 
<xsl:output method="xml" indent="yes" /> 
 
<xsl:decimal-format name="fmt" digit="D" />

<xsl:template match="/root">
  <root>
   <xsl:for-each select="Record">
    <Sample label="{@sample}">
     <xsl:for-each select="row[Axis = 'a']">
      <Record>
       <Ratio_A_by_C>
         <xsl:value-of select="format-number(length
div following-sibling::row[1]/length, 'DDDD.DD',
'fmt')" />
       </Ratio_A_by_C>
       <ExperimentalConditions>
          <xsl:for-each select="*[(name() != 'Axis')
and (name() != 'length')]">
            <xsl:element name="{name()}">
              <xsl:value-of select="." />
            </xsl:element>
          </xsl:for-each>
       </ExperimentalConditions>
      </Record>
     </xsl:for-each>
    </Sample> 
   </xsl:for-each>
  </root> 
</xsl:template>
  
</xsl:stylesheet>

Regards,
Mukul

--- Xiang Li <lix@xxxxxxx> wrote:

> 
> Hi, Mukul,
> 
> Thanks for your reply. I guess I did not explain the
> problem well in my
> last message, actually i wanted to put togther
> row[Axis='c'] and
> row[Axis='a'] according to their experimental
> conditions, so that i can use
> their <length> values to do some calculations. and
> the grouping is done
> within each <Sample> element.
> 
> so my output file should look like:
> 
> <root>
>  <Sample label="1">
>    <Record>
>      <Ratio_A_by_C>1.02</Ratio_A_by_C> <!--length of
> 'a' divided by length
> of 'c' -->
>      <ExperimentalConditions>
>        <atmosphere>air</atmosphere>
>        <temperature>200K</temperature>
>      </ExperimentalConditions>
>    </Record>
>    <Record>
>      <Ratio_A_by_C>0.93</Ratio_A_by_C>
>      <ExperimentalConditions>
>        <atmosphere>air</atmosphere>
>        <temperature>400K</temperature>
>      </ExperimentalConditions>>
>    </Record>
>    <Record>
>      <Ratio_A_by_C>1.0</Ratio_A_by_C>
>      <ExperimentalConditions>
>        <atmosphere>Ar</atmosphere>
>        <temperature>200K</temperature>
>      </ExperimentalConditions>
>    </Record>
>   </Sample>
>  <Sample label="2">
>    <Record>
>      <Ratio_A_by_C>1.15</Ratio_A_by_C>
>      <ExperimentalConditions>
>        <atmosphere>air</atmosphere>
>        <temperature>200K</temperature>
>      </ExperimentalConditions>
>    </Record>
>  ...
>  ...
>  </Sample>
> </root>
> 
> one additional problem is that the experimental
> condition tags
> (temperature, are not always the same.
> 
> Appreciate your help!
> 
> Xiang
> 
> 
> On Wed, 4 Aug 2004 09:33:24 -0700 (PDT) Mukul Gandhi
> wrote:
> 
> > Hi Xiang,
> > Please try this XSL -
> > (this is a Muenchian Grouping solution)
> > 
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> > 
> > <xsl:output method="text"/>
> >	  
> > <xsl:key name="by-row" match="row"
> > use="concat(length,' ',Axis)" />
> >	  
> > <xsl:template match="/root">
> >    <xsl:for-each select="Record/row[generate-id(.)
> =
> > generate-id(key('by-row', concat(length,'
> > ',Axis))[1])]">
> >      Experiment (length=<xsl:value-of
> select="length"
> > />,Axis=<xsl:value-of select="Axis"
> > />)<xsl:text>
> </xsl:text>
> >      <xsl:for-each select="key('by-row',
> > concat(length,' ',Axis))">
> >	  <xsl:for-each select="*[(name() != 'length')
> > and (name() != 'Axis')]">
> >	     <xsl:value-of select="name()"
> > />=<xsl:value-of select="." />
> >	       <xsl:if test="position() !=
> > last()">,</xsl:if>
> >	  </xsl:for-each>
> >	  <xsl:text>
> </xsl:text>		  
> >      </xsl:for-each>
> >    </xsl:for-each>
> > </xsl:template>
> >	  
> > </xsl:stylesheet>
> > 
> > I added a <root> tag at the begining to make the
> XML
> > well formed.
> > 
> > Hope I understood the problem correctly..
> > 
> > Regards,
> > Mukul
> > 
> > --- Xiang Li <lix@xxxxxxx> wrote:
> > 
> > > Hi, 
> > > 
> > > I have some problems in restructuring some data
> > > files. what i have to do is
> > > to group the measurements(<length>) of "a" and
> "c"
> > > (<Axis>) together, so i
> > > need to find what are the other tags in each
> row,
> > > and read their values to
> > > decide which ones belong to the same experiment.
> 
> > > 
> > > my xml file looks like this:
> > > 
> > > <Record sample="1">
> > >    <row row_id='0'>
> > >	  <length>5.4</length>
> > >	  <Axis>a</Axis>
> > >	  <Environment>air</Environment>
> > >	  <Temperature>200K</Temperature>
> > >    </row>
> > >    <row row_id='1'>
> > >	  <length>5.3</length>
> > >	  <Axis>c</Axis>
> > >	  <Environment>air</Environment>
> > >	  <Temperature>200K</Temperature>
> > >    </row>
> > >    <row row_id='2'>
> > >	  <length>5.0</length>
> > >	  <Axis>a</Axis>
> > >	  <Environment>air</Environment>
> > >	  <Temperature>400K</Temperature>
> > >    </row>
> > >    <row row_id='3'>
> > >	  <length>5.4</length>
> > >	  <Axis>c</Axis>
> > >	  <Environment>air</Environment>
> > >	  <Temperature>400K</Temperature>
> > >    </row>
> > >    <row row_id='4'>
> > >	  <length>5.4</length>
> > >	  <Axis>a</Axis>
> > >	  <Environment>Ar</Environment>
> > >	  <Temperature>200K</Temperature>
> > >    </row>
> > >    <row row_id='5'>
> > >	  <length>5.4</length>
> > >	  <Axis>c</Axis>
> > >	  <Environment>Ar</Environment>
> > >	  <Temperature>200K</Temperature>
> > >    </row>
> > > </Record>
> > > <Record sample="2">
> > >	  ...
> > > </Record>
> > > 
> > > Problem is, tags other than <length> and <Axis>
> vary
> > > from sample to sample.
> > > this seems like impossible for me to do the
> grouping
> > > using xslt. Maybe some
> > > gurus here can give me your brilliant ideas?...
> > > thanks!!
> > > 
> > > Xiang



		
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail 

Current Thread