Re: [xsl] Re: RE: Re: RE: Re: XPath riddle

Subject: Re: [xsl] Re: RE: Re: RE: Re: XPath riddle
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 05 Jul 2001 11:54:11 +0100
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@xxxxxxxxxxxxxxxx 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



Current Thread