Re: Selecting all descendants with no child nodes

Subject: Re: Selecting all descendants with no child nodes
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Tue, 03 Oct 2000 17:19:34 +0100
Taras,

Beginner XPath questions are fun. Educational for the newbies, and we all
get to see what different things people come up with.

At 10:24 PM 10/3/00 +0200, you wrote:
..
>I'm using the XPath expression "//*[count(*)=0]" to locate all "endpoint"
>nodes.
>
>Is there any other way to achieve this, an alternative syntax?

If you mean elements with no element children (which is what your version
is), then
//*[not(*)]

If all nodes that have no children at all (apart from attribute nodes), then
//node[not(node())]

but this will get you terminal (leaf) text nodes too.

//*[not(node())]
gets you all elements that have no text nodes, elements, comments or
processing instructions inside them.

They all have in common the feature that an empty node-set evaluates, in an
expression that requires a boolean operand (such as a predicate []), as a
boolean false; so when you do the not() operation on an empty node-set, you
get boolean true.

Hope that helps,
Wendell


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
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
======================================================================


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


Current Thread