RE: [xsl] Counting preceding nodes

Subject: RE: [xsl] Counting preceding nodes
From: "Kevin Bird \(Matrix\)" <kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 7 Jan 2005 16:44:41 -0000
Thank you for the comprehensive answer.

Kevin 

> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx] 
> Sent: 07 January 2005 16:35
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Counting preceding nodes
> 
> It's easiest to do this in XSLT:
> 
>    <xsl:number count="level3" level="any" from="level1"/>
> 
> and of course you can put that in a variable.
> 
> In XPath 2.0 you can do 
> 
>    count(ancestor::level1/level2/level3[. << current()])
> 
> An XPath 1.0 solution, given that your hierarchy is very rigid, is
> 
>    count(preceding-sibling::level3) +
> count(../preceding-sibling::level2/level3)
> 
> If a level2 only ever has exactly one level3 child, as in 
> your example, you can just do
> 
>    count(../preceding-sibling::*)
> 
> Michael Kay
> http://www.saxonica.com/  
> 
> 
> > -----Original Message-----
> > From: Kevin Bird [mailto:kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx]
> > Sent: 07 January 2005 16:20
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Counting preceding nodes
> > 
> > Hi
> > 
> > I have the following XML structure, <level3/> is my context node. I 
> > want to count the preceding <level3/> nodes that have the same 
> > <level1> grandparent. I can't seem to get my head around the XPATH 
> > syntax.
> > 
> > <wrapper>
> > <level1>
> > 	<level2>
> > 		<level3/>
> > 	</level2>
> > 	<level2>
> > 		<level3/>
> > 	</level2>
> > 	<level2>
> > 		<level3/>
> > 	</level2>
> > </level1>
> > <level1>
> > 	<level2>
> > 		<level3/>
> > 	</level2>
> > 	<level2>
> > 		<level3/>
> > 	</level2>
> > 	<level2>
> > 		<level3/>	<!-- when context, preceding count will
> > be 2 -->
> > 	</level2>
> > 	<level2>
> > 		<level3/>	<!-- when context, preceding count will
> > be 3 -->
> > 	</level2>
> > </level1>
> > </wrapper>
> > 
> > Thanks.
> >  
> > --
> > Kevin

Current Thread