Re: [xsl] XPath for number of preceding nodes sharing an ancestor

Subject: Re: [xsl] XPath for number of preceding nodes sharing an ancestor
From: Michael Strasser <M.Strasser@xxxxxxxxxxxxx>
Date: Wed, 16 May 2001 10:06:40 +1000
> > I want to count the number of preceding nodes that share an
> > ancestor node.
> >
> > My XSL includes:
> >
> > <xsl:template match="input">
> >   <xsl:variable name="input-count"
> >     select="count(preceding::input[ancestor::inputform =
> > current()/ancestor::inputform]) + 1"/>
> >
> > This works but ...
> 
> It appears to work but it's wrong. You're comparing the string-value
> of the ancestor nodes, not their identity. It's possible for two
> different nodes to have the same string-value, which will throw
> your code.

Thanks, I see that now.

> You really need a set intersection here; if you don't want to use an
> extension function there's the $x[count(.|$y)=count($y)] trick.

Will you please elaborate? I don't understand the 'trick'. What are the
values of $x and $y?

Also, could I use:

  count(preceding::input[generate-id(ancestor::inputform) =
    generate-id(current()/ancestor::inputform)])

-- 
Michael Strasser
Brisbane, Australia

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread