xsl-list
[Top] [All Lists]

RE: Counting preceding nodes

2005-01-07 09:44:41
Thank you for the comprehensive answer.

Kevin 

-----Original Message-----
From: Michael Kay [mailto:mike(_at_)saxonica(_dot_)com] 
Sent: 07 January 2005 16:35
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_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>
--~--




--~------------------------------------------------------------------
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>