[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Counting preceding nodes


Subject: RE: [xsl] Counting preceding nodes
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 7 Jan 2005 16:35:24 -0000

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
Keywords