xsl-list
[Top] [All Lists]

Re: position()

2005-02-03 13:03:57
* Wendell Piez <wapiez(_at_)mulberrytech(_dot_)com> [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[(_at_)name = current()/@name]"/>
     </xsl:template>

   How do I select just the first ancestor component?

   Will this work?

     ancestor::bundle/component[(_at_)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[(_at_)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(_at_)engrm(_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>