Re: [xsl] How to efficently determine if a nodes exists with an attribute value other than those in a list

Subject: Re: [xsl] How to efficently determine if a nodes exists with an attribute value other than those in a list
From: "Peter Hunsberger" <peter.hunsberger@xxxxxxxxx>
Date: Tue, 7 Aug 2007 12:03:55 -0500
On 8/7/07, David Carlisle <davidc@xxxxxxxxx> wrote:
>
> > <xsl:variable name="tcheck"><xsl:sequence
> > select="'x',y','z'"/></xsl:variable>
>
> xsl:variable with no as or select attribute always creates a document
> node, so here $tcheck is a document node with a child text node with
> string value 'x y z'
> what you want is
>
>
> <xsl:variable name="tcheck" select="'x',y','z'"/>
>
>
> which gives you a sequence of strings,
>

Still getting used to XSLT 2, that makes sense...

> but then
>
> @type except $tcheck
>
> except is set difference, using _node identity_
> as the test. As you had it  it's the same as @type as
> it is the sequece 9of 1) type attribute nodes, minus the document node
> in $tcheck.
>
> Once $tcheck is a sequence of strings you'd get a type error as execpt
> needs node sequences.
>
> doc/*[(not(@type=$tcheck))]
>
> is your friend (or not depending on whether a node not having a type
> attribute at all is a possibility, and what you want in that case)
>

This however is a little less intuitive.  Checking an attribute
against a sequence for equality seems a little suprising, I'd expect
an "in" operator or some such thing (let me guess, XSLT 1.0
compatability?), but it appears to work so all is good.

Thanks


-- 
Peter Hunsberger

Current Thread