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] |
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] |