Re: [xsl] position()

Subject: Re: [xsl] position()
From: Alan Gutierrez <alan-xsl-list@xxxxxxxxx>
Date: Thu, 3 Feb 2005 15:03:57 -0500
* Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> [2005-02-02 18:06]:
> Alan,
> 
> At 04:52 PM 2/2/2005, you wrote:
> >   <document>
> >      <bundle>
> >        <component name="foo"/>
> >        <bundle>
> >          <component name="foo"/>
> >          <target name="foo"/>
> >        </bundle>
> >      </bundle>
> >    </document>
> >
> >    Given this XSLT:
> >
> >      <xsl:template match="/document//target">
> >        <xsl:apply-tempaltes
> >          select="ancestor::bundle/component[@name = current()/@name]"/>
> >      </xsl:template>
> >
> >    How do I select just the first ancestor component?
> >
> >    Will this work?
> >
> >      ancestor::bundle/component[@name = current()/@name and position() = 
> >      1]
> >
> >    Or does that refer to the position of component as a child of
> >    bundle, therefore matching both components.
> 
> The latter.
> 
> You can get what you want by grouping all the components and then filtering 
> from the group, instead of filtering only on the XPath step:
> 
> (ancestor::bundle/component[@name = current()/@name])[1]
> 
> By "first" I assume you mean "first in document order".

    I mean first ancestor, or youngest ancestor. That would probably
    be reverse document order.

    Thanks for the explaination. It makes perfect sense to me.

--
Alan Gutierrez - alan@xxxxxxxxx

Current Thread