Re: [xsl] Using variables to get the complement of a node set

Subject: Re: [xsl] Using variables to get the complement of a node set
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 10 Feb 2012 12:19:42 -0500

Glossing David again,

If you have

<xsl:variable name="alpha" select="A | B | C | D"/>

Keep in mind this will bind $alpha only to the A,B,C and D children of the context (the root if the variable declaration is global).

You can bind to all the A|B|C|D in the document with

<xsl:variable name="alpha" select="//A | //B | //C | //D"/>

On 2/10/2012 6:42 AM, David Carlisle wrote:
<xsl:template match="* except $alpha"/>
no that would be a legal xpath but not a pattern

<xsl:template match="*[not $alpha]"/>

no, that's a syntax error so wouldn't run at all

<xsl:template match="*[exists(. except $alpha)]">

will work with the declaration of $alpha given above.

Of course this will tend to be much less efficient than what David suggests:

easiest is

<xsl:template match="*"> the complement

<xsl:template match="A|B|C|D" priority="2"> this one

I've had times when I wanted to parameterize match patterns though.


Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.      
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
  Mulberry Technologies: A Consultancy Specializing in SGML and XML

Current Thread