RE: [xsl] Count Ancestors Up To But Not Including a Given Type

Subject: RE: [xsl] Count Ancestors Up To But Not Including a Given Type
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 5 Feb 2008 09:52:13 -0000
Perhaps

<xsl:for-each-group select="reverse(ancestor::*[self::ol|self::ul])"
group-adjacent="node-name()">
  <xsl:if test="position()=1">
    <xsl:sequence select="count(current-group())"/>
  </xsl:if>
</xsl:for-each-group>

That is, partition the ancestors into runs of ol or ul, and then get the
length of the first run.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Eliot Kimber [mailto:ekimber@xxxxxxxxxxxx] 
> Sent: 05 February 2008 07:18
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Count Ancestors Up To But Not Including a Given Type
> 
> Maybe it's the lateness of the hour but I'm finding myself 
> stymied on what I hope is relatively simple check.
> 
> In DITA, as in many doctypes, you can have nested lists of the form:
> 
> <ol>
>   <li>
>    <ol>
>     <li>
>     </li>
>    </ol>
>   </li>
> </ol>
> 
> As well as an intermixing of different list types, e.g.:
> 
> <ol>
>   <li>
>    <ul>
>     <li>
>      <ol>
>       <li>
> 
> 
> What I need to do is determine, for a given li, its depth of 
> nesting within unbroken ancestry of a given list type.
> 
> Thus, int the first example, the deepest li is a level 2 
> because it has two ancestor <ol> elements with no intervening 
> <ul> (or other non-list element that might occur within <li> 
> and itself contain a list). In the second example, the 
> deepest <li> is a level one because there is an intervening 
> <ul> between the two <ol> ancestors.
> 
> I can't for the life of me figure out either a single 
> expression or a recursive function that will return the 
> correct answer.
> 
> What bit of logic am I failing to see? I am using XSLT 2.
> 
> Thanks,
> 
> ELiot
> 
> --
> Eliot Kimber
> Senior Solutions Architect
> "Bringing Strategy, Content, and Technology Together"
> Main: 610.631.6770
> www.reallysi.com
> www.rsuitecms.com

Current Thread