Wendell,
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?
Thanks,
Lars
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 =
preceding-sibling::*/status)]">
An example from the XML might be: truck,silverado,chevy,on
truck,silverado,chevy,off truck,ranger,ford,on truck,silverado,chevy,on
truck,silverado,chevy,off
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.
See http://www.dpawson.co.uk/xsl/sect2/N4486.html
HTH,
Lars
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list