Subject: Re: [xsl] grouping questions From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx> Date: Thu, 5 Aug 2004 07:22:59 -0700 (PDT) |
Hi Xiang, If rows of "c" are not always the "following-sibling::row[1]" to the corresponding "a" row , then somehow you have to find the pattern by which they are related, and construct a suitable XPATH expression. Without looking at all possible ways by which "a" and "c" rows are related, its difficult to suggest a solution. Regards, Mukul --- Xiang Li <lix@xxxxxxx> wrote: > > Hi, Mukul, > > Thank you again for the XSL file. now i have one > more question left, if in > the original file, rows of "c" are not always the > "following-sibling::row[1]" to the corresponding "a" > row, is there any way > to find it? the reason i asked this question is, I > got the original data > from different sources, and there are lots of > problems with the original > data. > > Regards, > Xiang > > On Wed, 4 Aug 2004 21:40:33 -0700 (PDT) Mukul Gandhi > wrote: > > > 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!? Y! Messenger - Communicate in real time. Download now. http://messenger.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] grouping questions, Xiang Li | Thread | [xsl] Linenumbering & word index, James Cummings |
[xsl] Position() with absolute path, Jeff Cann | Date | Re: [xsl] Position() with absolute , David Carlisle |
Month |