This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Re: RE: Re: RE: Re: XPath riddle


At 01:28 PM 7/5/01, Dimitre wrote:
>Now, if I understand you well, you want every D/C, for which the first 
>ancestor from
>a given list of ancestors (the list of elements defining D and its child C as
>descendents) to be "A" and nothing else.
>
>Then this is returned by:
>
>//D/C[name(ancestor::*[name()='A' or name()='F'][1])='A']

Or

//D/C[(ancestor::A|ancestor::F)[last()][self::A]]

Grouping the two location paths ancestor::A and ancestor::F creates a node 
set to be evaluated in document order; the last() predicate selects the 
latest (deepest) of these ancestors; the self::A makes sure it's an A 
element (by throwing it out if it's not).

You can add other ancestors to the mix by adding to the 
(ancestor::A|ancestor::F) group, or alter the condition in other ways (for 
example, just leaving out any C with an F grandparent (not just an F 
ancestor at any level), by grouping (ancestor::A|../parent::F).

Also, remember if this expression is going in a match you don't need the 
initial "//" (a detail that not everyone seems to have assimilated).

Cheers,
Wendell


======================================================================
Wendell Piez                            mailto:wapiez@mulberrytech.com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
   Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]