RE: [xsl] Using not(...a nd ... ) to select nodes

Subject: RE: [xsl] Using not(...a nd ... ) to select nodes
From: "Lars Huttar" <lars_huttar@xxxxxxx>
Date: Thu, 10 Jul 2003 16:47:55 -0500

This is something that's been fuzzy in my mind for a while...

In order for your code to work, current() in the select expression
of a for-each loop must refer to the <item> node currently being
tested for whether it gets selected, right?
If so, is this the way xsl:for-each / xpath work?
I realize that INSIDE the for-each, current() refers to the node
currently being processed, but is that also true in the select
expression of the for-each? Or does current() there refer to
the context node outside the for-each?


> Chris,
> Try
> select="items/item[not(preceding-sibling::*
>    [name=current()/name and
>     type = current()/type and
>    status = current()/status])]"
> The problem with your statement is it's testing true if there no 
> corresponding values on any preceding siblings, whereas you 
> want it to be 
> true only if there's a preceding sibling with all 
> corresponding values.

I thought the same thing... but if that's the case I can't figure
out why he's getting only the second and third items.  I would have
thought the first one would have been selected since it doesn't
have any preceding siblings.

Chris wrote:
>I'm using the following to select the nodes:
><xsl:for-each select="items/item[not(name = preceding-sibling::*/name
>and type = preceding-sibling::*/type and status =
>An example from the XML might be: truck,silverado,chevy,on
>truck,silverado,chevy,off truck,ranger,ford,on  truck,silverado,chevy,on
> >From that I want to see the first three in a node set.  However, what
>I'm getting are the second and third ones.
>Any suggestions would be much appreciated.

I think you probably need to do Muenchian grouping using a composite
key on name, type, and status.


 XSL-List info and archive:

Current Thread