RE: [xsl] Template matching preceding-sibling.

Subject: RE: [xsl] Template matching preceding-sibling.
From: "Scott Trenda" <Scott.Trenda@xxxxxxxx>
Date: Thu, 8 Nov 2007 13:14:51 -0600
Hey Steve,

Looks like you've solved the problem, but here's a quick pointer. Start
learning to avoid !=, and start using not() instead. Since comparison
operators on node-sets are combinatoric, your first comparison says "if
there are any preceding-sibling::activity nodes that ARE NOT equal to my
child::activity node", instead of "if there are NOT any
preceding-sibling::activity nodes equal to my child::activity node",
which is what I believe you're intending. Use the following XPath
instead:

Rec[not(activity = preceding-sibling::Rec/activity)]

not() is usually the safest bet, especially when node-sets come into the
mix.

~ Scott

-----Original Message-----
From: Steve [mailto:subsume@xxxxxxxxx]
Sent: Thursday, November 08, 2007 12:17 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Template matching preceding-sibling.

I'm sorry, but isn't the first <Rec> in my XML the preceding-sibling
of the second <Rec> ?

-Steve

On Nov 8, 2007 1:13 PM,  <cknell@xxxxxxxxxx> wrote:
> Your template matches both <Rec> elements, so you get two instances of
"Ello xslers." in your output.
>
> Your template matches and <Rec> element with an <activity> child
element that doesn't have preceding-sibling <Rec>. Since both <Rec>
elements have <activity> child elements, and since none of the
<activity> elements has a preceding-sibling of ANY kind, you are
matching both <Rec>s.
> --
> Charles Knell
> cknell@xxxxxxxxxx - email
>
>
>
>
> -----Original Message-----
> From:     Steve <subsume@xxxxxxxxx>
> Sent:     Thu, 8 Nov 2007 12:59:01 -0500
> To:       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  [xsl] Template matching preceding-sibling.
>
> I'm missing something fundamental, what is it?
>
> <xsl:template match="Rec[activity != preceding-sibling::Rec/activity
> or not(preceding-sibling::Rec)]">
>   Ello xslers.
> </xsl:template>
>
> <xml>
>    <Rec>
>      <activity>hi</activity>
>    </Rec>
>    <Rec>
>       <activity>hi</activity>
>    </Rec>
> </xml>
>
> ----
>
> Above should only print anything once, but I'm getting it each time.
> What am I not getting?
>
> -Steve

Current Thread