- From: Kay, Michael <Michael.Kay@softwareag.com>
- Date: Wed, 3 Jul 2002 18:31:21 +0200
- To: Berend de Boer <berend@xsol.co.nz>, public-qt-comments@w3.org
> XPath 1.0 only seems to be able to return an element and ALL of its
> children. Does XPath 2.0 allow to write an expression that returns an
> element and SOME of its children?
This list isn't really intended for such questions: it's designed for
comments on the spec, not for getting help and advice.
You are wrong about XPath 1.0: the expression
publisher[book[contains(@title, 'XML')]]
| publisher/book[contains(@title, 'XML')]
returns a node-set containing the required books together with their
publishers.
In XPath 2.0 you can express this more concisely as:
publisher/book[contains(@title, 'XML')]/(.|..)
However, your example shows that this isn't really what you want.
>
> Example:
>
> <publisher name="Addison Wesley">
> <book title="... XML .."/>
> <book title="... Eiffel ..."/>
> <book title="... XML ..."/>
> </publisher>
> <publisher name="O'Reilly">
> <book title="... XML ..."/>
> <book title="... Java ..."/>
> </publisher>
>
> I want to get all books where XML appears in the title, but I want to
> know the publisher as well. This is the result I want to see:
>
> <publisher name="Addison Wesley">
> <book title="... XML .."/>
> <book title="... XML ..."/>
> </publisher>
> <publisher name="O'Reilly">
> <book title="... XML ..."/>
> </publisher>
>
Neither XPath 1.0 nor XPath 2.0 can construct this result. XPath only
selects nodes in an existing tree. To construct a new tree, by selectively
copying nodes from an existing tree, you need XSLT or XQuery.
Michael Kay
Received on Wednesday, 3 July 2002 12:31:29 UTC