[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] how to select elements based on their children's names?


Subject: Re: [xsl] how to select elements based on their children's names?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Mon, 10 Mar 2003 16:12:42 -0500

At 03:38 PM 3/10/2003, Markus wrote:
Robert P. J. Day wrote:
  if i want to select all elements that have at least one, say,
"book" child element, it seems i can do it this way:
  //*[name(child::*) = "book"]          long way
  //*[name(*) = "book"]                 shorter way
1) is this the easiest way to do it?

//*[book]


2) why doesn't the following work as well?
  //*[name(node()) = "book"]

i'm not sure, but i think this will compare the name of the first child only.

Yup. The name() function takes a node set as its argument, and returns the name of the first node in the node set.


All three of Robert's name tests will fall into this category.

//*[book] is the way to do it, since the XPath expression "book" (short for child::book) returns true if there are any book child elements (not just if the first element child is a book)

//*[book] is short for

/descendant-or-self::node()/child::*[child::book]

(Traversing from the root, get all nodes at any depth, then get any element child that has a book element child.)

name(node())='book' might be seeming to fail where name(*)='book' seems to work due to whitespace in the input. If the first element child is a <book> but it is preceded by a text node (even one that just contains a line feed), the test name(node())='book' on its parent will test false whereas name(*)='book' tests true.

I hope this clarifies!
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
Keywords