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(_dot_)bird(_at_)matrixdigitaldata(_dot_)co(_dot_)uk]
Sent: 07 January 2005 16:20
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--