xsl-list
[Top] [All Lists]

Re: [xsl] Best Way to Select Following Elements With An Ancestor?

2014-03-22 08:18:31
On 22/03/2014 12:46, Eliot Kimber 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. So simply doing
following::* won't work and the following elements I'm checking for need
not be siblings of the current element.

The solution I arrived at is:

<xsl:variable name="myDitaAncestor" select="ancestor::dita"
as="element()*"/>

     <xsl:variable name="followingWithinDita" as="element()*"
   select="following::*[count(ancestor::dita | $myDitaAncestor) = 1]"
     />

This works but I'm wondering if there's a better solution, either one that
is more efficient or one that is more elegant?





well if you know there's a dita acestor,

count(ancestor::dita | $myDitaAncestor) = 1

can be written

ancestor::dita is $myDitaAncestor


you could also do

following::* union $myDitaAncestor//*

but I'd guess that's less efficient.

Something tells me you should be using a key, but keying the dita elements on all its descendents sounds a bit expensive.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--