Re: [xsl] Count elements A up to any element B in an axis

Subject: Re: [xsl] Count elements A up to any element B in an axis
From: Lars Huttar <lars_huttar@xxxxxxx>
Date: Tue, 30 Nov 2010 11:09:46 -0600
On 11/30/2010 10:09 AM, Christian Roth wrote:
> Effectively, I need to determine the level of a (possibly nested) list I
> (=context node) am at. 
>
> I thought I would do this by counting my ancestor list elements A.
> However, certain elements along that axis establish a new level-counting
> context (e.g. a table cell or a footnote, B), so I only want to count
> until such an element first appears in the ancestor chain.
>
> My current solution is
>
> count( 
>   ancestor-or-self::A[ . >> ancestor::node()[self::B or /][1] ] 
>      )

On 11/30/2010 11:02 AM, David Carlisle wrote:
>
>> .>>  ancestor::node()[zzzzz]
>
> the . >> doesn't appear to be doing anything here is it?
>
> . is always after its ancestors, so it is just checking that some
> ancestors matching the predicate exist, unless i misread it...

So maybe you need

count( 
  ancestor-or-self::A except ancestor-or-self::B[1]/ancestor::A
     )

(The [1] being there only for performance purposes.)

Current Thread