[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: current context preceding-sibling then following-

Subject: Re: current context preceding-sibling then following-sibling
From: Karl Stubsjoen <kstubs@xxxxxxxxx>
Date: Tue, 8 Mar 2005 13:58:03 -0700
current preceding sibling
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.