[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
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
|