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
|