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

Subject: [xsl] Re: how to select elements based on their children's names?
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Mon, 10 Mar 2003 22:42:52 +0100
>   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

These are both wrong -- they match all elements whose *first* child's name
is "book".

Elements, which have a child named "book", but it doesn't happen to be the
first child -- are not matched by these two expressions.

An expression satisfying your requirements is:

//*[book]

>
> 1) is this the easiest way to do it?

No, because it is not at all a way to do it -- see above.
>
> 2) why doesn't the following work as well?
>
>   //*[name(node()) = "book"]

See above -- in addition this might not return any node, if the first child
of any element happens to be one for which
name() is the empty string -- e.g. a text node.




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


Current Thread