Subject: Re: [xsl] Best Way to Select Following Elements With An Ancestor?|
From: David Rudel <fwqhgads@xxxxxxxxx>
Date: Sat, 22 Mar 2014 18:16:01 +0100
On Sat, Mar 22, 2014 at 1:46 PM, Eliot Kimber <ekimber@xxxxxxxxxxxx> wrote: > I have a document where each child of the root element establishes a > unique content with regard to the output result (in this case, > corresponding to InDesign frames). > > For a given descendant of one of these elements I need to know if there > are any following elements within the same context. I may be thinking about this the wrong way, but it seems like the situation you describe (some following element exists that is a descendant of the same context-setting node) is equivalent to saying "Either this node has a following-sibling, or some ancestor of it has a following-sibling, not counting the context-setting nodes." Is the above accurate? If the above understanding is correct, then a more elegant answer would be to use recursive functions: Define a recursive function that uses the following logic: f($x) = false if $x is one of the context nodes (/child::element()) f($x) = true if $x has any following::sibling elements. f($x) = f($x/..) if neither of the above statements resolves the answer. Or, without recursive functions: Define a variable containing the context-setting nodes: $context_nodes = /child::element() Then the predicate you want is: boolean(ancestor-or-self::element()[not($context_nodes)]/following-sibling::element() -David -- "A false conclusion, once arrived at and widely accepted is not dislodged easily, and the less it is understood, the more tenaciously it is held." - Cantor's Law of Preservation of Ignorance.