Re: [xsl] current context preceding-sibling then following-sibling

Subject: Re: [xsl] current context preceding-sibling then following-sibling
From: "Joris Gillis" <roac@xxxxxxxxxx>
Date: Tue, 08 Mar 2005 22:19:56 +0100
Tempore 21:58:03, die 03/08/2005 AD, hinc in xsl-list@xxxxxxxxxxxxxxxxxxxxxx scripsit Karl Stubsjoen <kstubs@xxxxxxxxx>:
    <record id="40" says="ruff" animal="dog">
    	<field fieldname="chase" id="50">cat</field>
    <record id="50" says="meow" animal="cat">
    	<field fieldname="chase" id="60">mouse</field>
    <record id="60" says="squeak" animal="mouse">
    	<field fieldname="chase" id="00">cheese</field>
    <animal id="60" />
    <animal id="50" />
    <animal id="40" />
    <animal id="50" />
    <animal id="60" />
    <animal id="40" />
    <animal id="50" />
    <animal id="40" />
    <animal id="80" />
I am interested in returning all matches for animals who are in a
proper "chase" order.  So for example, the above animal who's ID is
50, is correctly in order if the proceding-animal is 40 (there should
be 2 matches).  Similarily, the animal who's ID is 60 is in correct
order one time with the proceding-animal who's ID is 50.  This "chase"
order is to be derived by the code/record lookup above.


It would be easier to use keys here:

<xsl:key name="chases" match="field[@fieldname='chase']" use="../@id"/>

<xsl:template match="data">
<xsl:copy-of select="animals/animal[@id=key('chases',preceding-sibling::animal[1]/@id)/@id]"/>

regards, -- Joris Gillis ( Spread the wiki (

Current Thread