Re: [xsl] XPath: all elements with only non-parent children with identical style attr

Subject: Re: [xsl] XPath: all elements with only non-parent children with identical style attr
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Wed, 12 Dec 2001 12:14:46 +0000
Hi Tom,

>>Jeni kindly provided me this one:
>>
>>  *[* and
>>     not(*/node()) and
>>     not(*[not(@style)]) and
>>     not(*/@style != */@style)]
>
> maybe a dumb question but why all the "not"s (and writhing and fainting in
> coils?)
> wouldn't 
> *[* and not(*/node()) and (*/@style) and (*/@style = */@style)] 
> work the same way?

Nope. Part of the reason it's like that is that when I gave the
solution to Tobi (offlist) then I went through it bit by bit, so it
just got constructed like that. But partly it's because the way that
XPath logic works it has to be like that.

For example:

  */@style

or:

  *[@style]

is true if *any* of the child elements of the current element have a
style attribute. On the other hand:

  not(*[not(@style)])

is true if *none* of the child elements of the current element do not
have a style attribute. Given the following children:

  <foo style="bar" />
  <foo />

The first will return true, and the second will return false.

Similarly:

  */@style = */@style

is true if *any* of the style attributes of the child elements of the
current element is the same as any other style attribute of the child
elements of the current element. On the other hand:

  not(*/@style != */@style)

is true if *none* of the style attributes of the child elements of the
current element are not the same as any other style attribute of the
child elements of the current element. Given the following children:

  <foo style="bar" />
  <foo style="bar" />
  <foo style="baz" />

The first will return true, and the second will return false.

But you're right that I could combine some of it together - it could
be:

  *[* and
    not(*/node() or
        *[not(@style)] or
        */@style != */@style)]

with the same effect.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread