This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: generalized unique element
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 11 Sep 2002 15:47:13 +0100
- Subject: RE: [xsl] generalized unique element
- Reply-to: xsl-list at lists dot mulberrytech dot com
> if i have to put a condition that name of the current
> element(any element)
> is not the same of any of the preceding elements ..how do i proceed
> further..
> i cant get my heads on this..
>
> tried doing something like..
> <xsl:if test="not(name(.) = preceding::node()/name())">
>
> I am sure the above line is a mistake.
It is indeed a mistake. When the operands to "=" are node-sets, the
operator means "if any node on the left has the same string-value as a
node on the right". But XPath 1.0 doesn't allow sets of strings, and
preceding-node()/name() is therefore meaningless (and wrong).
There isn't an existential test of the kind you are looking for in XPath
1.0. This is why Muenchian grouping was invented, it achieves the
required effect using keys.
It all gets easier in XPath 2.0, where you can write
<xsl:if test="every $x in preceding-sibling::*
satisfies name($x) != name(.)">
Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list