Subject: Re: Re: RE: [xsl] sequence numbering. From: Chuck Paussa <cpaussa@xxxxxxxxx> Date: Tue, 2 Apr 2002 10:16:22 -0800 (PST) |
William, You didn't put in the $ for the variable $this_color. Otherwise it works. Chuck Paussa <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan = "http://xml.apache.org/xalan" exclude-result-prefixes="xalan"> <xsl:output omit-xml-declaration="yes" method="text"/> <xsl:key name = "color" match = "//colorlist/color" use = "@id"/> <xsl:template match="/"> <xsl:variable name="sorted-color"> <xsl:for-each select="//product"> <xsl:sort select="./color" data-type="text" order="descending"/> <xsl:copy-of select="."/> </xsl:for-each> </xsl:variable> <xsl:for-each select="xalan:nodeset($sorted-color)/product"> <xsl:variable name="this_color" select="./color"/> <xsl:number count="product[color=$this_color]"/><xsl:value-of select="$this_color"/> <xsl:value-of select="key('color',this_color)"/> <xsl:text>
</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> --- william locksman <vsd18@xxxxxxxxxxxxxx> wrote: > Hi , > Thanks very much to Jeni for sorting my probs out.. > That was really very helpful. > How ever there is one more problem that popped out. > Here it goes.. > The xml file.. > <products> > <product id = "1"> > <name>product1</name> > <weight>56</weight> > <color>11</color> > </product> > <product id = "2"> > <name>product2</name> > <weight>56</weight> > <color>11</color> > </product> > <product id = "3"> > <name>product3</name> > <weight>56</weight> > <color>11</color> > </product> > <product id = "4"> > <name>product4</name> > <weight>56</weight> > <color>12</color> > </product> > <product id = "5"> > <name>product5</name> > <weight>56</weight> > <color>12</color> > </product> > <colorlist> > <color id = "11"> > <name>red</name> > </color> > <color id = "12"> > <name>blue</name> > </color> > </colorlist> > </products> > Here i was adviced by Jenni to sort the colors and store it in > Variable.. and then use the <xalan:nodeset > for processing. > in doing so when i try to use the <xsl:key>, it does not seem to > give me the desired result. > i am pasting below the xsl.. > <?xml version="1.0"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan = > "http://xml.apache.org/xalan" exclude-result-prefixes="xalan"> > <xsl:output omit-xml-declaration="yes" method="text"/> > <xsl:key name = "color" match = "//colorlist/color" use = > "@id"/> > <xsl:template match="/"> > <xsl:variable name="sorted-color"> > <xsl:for-each select="//product"> > <xsl:sort select="./color" data-type="text" order="descending"/> > <xsl:copy-of select="."/> > </xsl:for-each> > </xsl:variable> > <xsl:for-each select="xalan:nodeset($sorted-color)/product"> > <xsl:variable name="this_color" select="./color"/> > <xsl:number count="product[color=$this_color]"/><xsl:value-of > select="this_color"/> > <xsl:value-of select="key('color',this_color)"/> > <xsl:text> </xsl:text> > </xsl:for-each> > </xsl:template> > </xsl:stylesheet> > > I was expecting a result that would look like > 1 blue > 2 blue > 1 red > 2 red > 3 red > but the key function is not returning any text.. > and the result is > 1 > 2 > 1 > 2 > 3 > Am i wrong in my XSL or is there any thing i am missing out and > which i am unaware of?? > thanks > william > >Hi William, > > > > > about the name space, > > > The Declartion i am using is > > > > > > <xsl:stylesheet > >xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > > xmlns:xalan="http://xml.apache.org/xslt" > > > xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect" > > > extension-element-prefixes="redirect" > > > version="1.0"> > > > > > > and i am using XALAN processor > > > >OK, then you should be able to use xalan:nodeset() extension > >function > >(see http://xml.apache.org/xalan-j/extensionslib.html#nodeset). > > > >[It seems likely that the next version of Xalan will support > >EXSLT > >functions. See the recent mail from Don Leslie > >(http://aspn.activestate.com/ASPN/Mail/Message/exslt/1083089). > >With > >that version, you'll be able to use the namespace > >http://exslt.org/common, and the function exsl:node-set(), which > >would > >make your stylesheet portable across a range of processors, > >including > >Saxon, libxslt, 4XSLT and jd.xslt.] > > > >Cheers, > > > >Jeni > > > >--- > >Jeni Tennison > >http://www.jenitennison.com/ > > > > > > XSL-List info and archive: > >http://www.mulberrytech.com/xsl/xsl-list > > > > > On Wed, 27 Mar 2002 william locksman wrote : > >Hi the solution Michael Suggested seems to fit my purpose, But > >Since i am a newbie to XSL , I do not know how to form a > >temporary tree that contains sorted sequence. > >Michael's explaination made me pretty much clear of what has to > >be done. But i do not know how it has to be done. > >If any one can please suggest me how to go about doing it or give > >me a link to any reference document, It should be of much help to > >me > >Thanks > >William > > > >On Tue, 26 Mar 2002 Michael Kay wrote : > >><xsl:number> gives you the position of the element in the source > >>tree, not > >>in the sorted sequence. To get the number in the sorted > >>sequence, do a > >>two-phase transformation: create a temporary tree that contains > >>the sorted > >>products, then process this (using xx:node-set()) to add the > >>numbers. To get > >>the number for a product among all the products of the same > >>colour, use > >><xsl:number count="product[color=$this_color]"/> > >> > >>Michael Kay > >>Software AG > >>home: Michael.H.Kay@xxxxxxxxxxxx > >>work: Michael.Kay@xxxxxxxxxxxxxx > >> > >> > -----Original Message----- > >> > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >> > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of > >>william > >> > locksman > >> > Sent: 26 March 2002 16:34 > >> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >> > Subject: [xsl] sequence numbering > >> > > >> > > >> > <products> > >> > <product id = "1"> > >> > <name>product1</name> > >> > <weight>56</weight> > >> > <color>blue</color> > >> > </product> > >> > <product id = "2"> > >> > <name>product2</name> > >> > <weight>56</weight> > >> > <color>red</color> > >> > </product> > >> > <product id = "3"> > >> > <name>product3</name> > >> > <weight>56</weight> > >> > <color>red</color> > >> > </product> > >> > <product id = "4"> > >> > <name>product4</name> > >> > <weight>56</weight> > >> > <color>blue</color> > >> > </product> > >> > <product id = "5"> > >> > <name>product5</name> > >> > <weight>56</weight> > >> > <color>blue</color> > >> > </product> > >> > </products> > >> > > >> > for the above xml for all the color elements in the xml > >>file, > === message truncated === __________________________________________________ Do You Yahoo!? Yahoo! Tax Center - online filing with TurboTax http://http://taxes.yahoo.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] sequence numbering., Jeni Tennison | Thread | Re: [xsl] sequence numbering., Chuck Paussa |
Re: [xsl] sequence numbering., Jeni Tennison | Date | Re: [xsl] Writing a stylesheet to c, Jeni Tennison |
Month |