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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] grouping questions, Xiang Li | Thread | Re: [xsl] grouping questions, Xiang Li |
[xsl] XSL-FO escaping line breaks, Sally Williamson | Date | RE: [xsl] JS not executed AFTER tra, Daniel Joshua |
Month |