Subject: Re: [xsl] current context preceding-sibling then following-sibling From: Karl Stubsjoen <kstubs@xxxxxxxxx> Date: Tue, 8 Mar 2005 13:58:03 -0700 |
I've tested the above preceding-sibling following-sibling scenarios and they work as described, thanks J.Petschmann. I have included a simpler example as to what data I am after. Here is the XML source followed by the intent of the xpath query to build followed by the xpath query that I have written so far: <data> <code> <record id="40" says="ruff" animal="dog"> <field fieldname="chase" id="50">cat</field> </record> <record id="50" says="meow" animal="cat"> <field fieldname="chase" id="60">mouse</field> </record> <record id="60" says="squeak" animal="mouse"> <field fieldname="chase" id="00">cheese</field> </record> </code> <animals> <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" /> </animals> </data> 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. Here is what I have sofar for xpath queries: HARD CODED SOLUTION: /data/animals/animal[preceding-sibling::animal[1][@id = ( '40' ) and following-sibling::animal[1]/@id= ( '50' ) ]] FIRST 40 WOULD BE SUBSTITUTED WITH: /data/code/record[field[@id=( '50' )]]/@id RESULT OF THIS SUBSTITUTION: /data/animals/animal[preceding-sibling::animal[1][@id = ( /data/code/record[field[@id=( '50' )]]/@id ) and following-sibling::animal[1]/@id= ( '50' ) ]] The above hard coded xpath query works... My dilemna: I can not hard code the 50. I need to return all chase / chasee combinations. Any ideas? On Mon, 07 Mar 2005 20:47:38 +0100, J.Pietschmann <j3322ptm@xxxxxxxx> wrote: > Karl Stubsjoen wrote: > > the context of the following-sibling following a preceding-sibling > > should result you in the context of the current sibling? > > It depends. Note: > > > The short of it is, I am comparing the preceding-sibling with the > > current. The preceding-sibling must contain the code "XYZ" when the > > current contains the code "WXY". > > If you talk about "content", be aware that looking up elements > both in the preceding-sibling and the following-sibling axis > are likely to produce node sets, and the stringification of a > node set will result in the string value of the first element in > document order. An example XML > <foo> > <bar>1</bar> > <bar>2</bar> > <bar id="3">3</bar> > </foo> > The statement > <xsl:value-of select=" > /foo/bar[@id='3']/preceding-sibling::bar > /following-sibling::bar"/> > > Will get you a 2, not a 3 as you might expect. > If in doubt, use a position predicate > <xsl:value-of select=" > /foo/bar[@id='3']/preceding-sibling::bar[1] > /following-sibling::bar[1]"/> > > J.Pietschmann
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] current context preceding, J.Pietschmann | Thread | Re: [xsl] current context preceding, Joris Gillis |
Re: [xsl] Is there a reason for not, Elliotte Harold | Date | RE: [xsl] Is there a reason for not, Michael Kay |
Month |