Re: [xsl] Understanding Identity Transformations

Subject: Re: [xsl] Understanding Identity Transformations
From: JBryant@xxxxxxxxx
Date: Mon, 14 Feb 2005 13:53:34 -0600
If I understand correctly, you want all nodes that have a cat attribute 
but not when the cat attribute has a value of BLUE?

In that case:

<xsl:template match="*[@cat][not(@cat='BLUE')]"/>


<xsl:template match="*[@cat and not(@cat='BLUE')]"/>

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)

Karl Stubsjoen <kstubs@xxxxxxxxx> 
02/14/2005 01:35 PM
Please respond to


Re: [xsl] Understanding Identity Transformations


I get it!

<xsl:template match="*[@cat!='BLUE']" />

Will match all nodes where the cat attribute is not equal to 'BLUE'
and... all nodes which do not have a cat attribute!!!

Really what I want is:
<xsl:template match="FOO[not(@cat='BLUE')]" />

Which will match all nodes where the cat attribute is not equal to
'BLUE' and... here is the important pars... and match only FOO element
who have a cat attribute!

Errr.... but couldn't get the first example to work until I
distinguished that the element FOO is the one I was interested in
matching.  Hmmmm.... I will feel triumphant when I can rewrite this
with *[not(...)] rather than FOO[not(...)].  I guess the problem is
that the top level node was not being matched.  So how to avoid
colliding with the top level node in this case where there is no cat


On Mon, 14 Feb 2005 12:14:01 -0700, Karl Stubsjoen <kstubs@xxxxxxxxx> 
> Ok.. .the following is working great, but I am using != operand.  How
> do you write the below match using not() and achieve same results?
> <xsl:template match="@* | node()">
>  <xsl:copy>
>        <xsl:apply-templates select="@*"/>
>        <xsl:apply-templates />
>  </xsl:copy>
> </xsl:template>
> <xsl:template match="*[@cat!='BLUE']" />

Current Thread