Subject: RE: [xsl] Elements just before/after the current one From: "M. David Peterson" <m.david@xxxxxxxxxx> Date: Thu, 27 May 2004 12:53:30 -0600 |
Hi Nicolas, When you are working with preceding-sibling you are working from the perspective of a reverse axis so preceding-sibling::*[1] goes backwards 1 position, preceding-sibling::*[2] goes back 2 and so forth... Some quick XSLT to showcase this is... XML: <?xml version="1.0"?> <foo> <bar>1</bar> <bar>2</bar> <bar>3</bar> <bar>4</bar> <bar>5</bar> <bar>6</bar> <bar>7</bar> <bar>8</bar> </foo> XSLT: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="foo/bar[8]"/> </xsl:template> <xsl:template match="bar"> <xsl:value-of select="preceding-sibling::bar[3]"/> </xsl:template> </xsl:stylesheet> Produces and output of: 5 Hope this helps! <M:D/> > -----Original Message----- > From: Nicolas Pillot [mailto:nicolas.pillot@xxxxxxxxxx] > Sent: Thursday, May 27, 2004 12:40 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Elements just before/after the current one > > > Hello! > > I have a problem, as you can guess. I am struggling to find the element > that is just before, and the element just after the current one. > > What i am doing now for the element after the current one is : > following-sibling::*[position() = 1] > And this seems to work. But for the element just before, i tried > following-sibling::*[last()] > but this gives me the first (topmost) item instead of the last ! > So i debugged with : > > <xsl:variable name="prevcount"> > <xsl:value-of select="count(preceding-sibling::*)" /> > </xsl:variable> > <xsl:for-each select="preceding-sibling::*"> > <xsl:element name="before"> > <xsl:value-of select="."/> <!-- or name() --> > <xsl:value-of select="position()"/> > <xsl:if test="position() = $prevcount"> > selected > </xsl:if> > </xsl:element> > </xsl:for-each> > > And the "selected" text appears right next to the good element. > Then i tried the following to sum it up : > > <xsl:variable name="prevcount"> > <xsl:value-of select="count(preceding-sibling::*)" /> > </xsl:variable> > <xsl:value-of select="preceding-sibling::*[position() = $prevcount]" > /> > > But again, it give me the content of the first (topmost) node !! > What am i doing wrong ?! Is there a simpler way to get these "special" > items ? > > Any help would be greatly appreciated ! > Nicolas
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Elements just before/afte, Nicolas Pillot | Thread | Re: [xsl] Elements just before/afte, G. Ken Holman |
RE: [xsl] Elements just before/afte, Nicolas Pillot | Date | Re: [xsl] Elements just before/afte, G. Ken Holman |
Month |