W3C home > Mailing lists > Public > public-qt-comments@w3.org > July 2002

RE: Does XPath 2.0 allow me to return a node and a subset of its child nodes?

From: Kay, Michael <Michael.Kay@softwareag.com>
Date: Wed, 3 Jul 2002 18:31:21 +0200
Message-ID: <DFF2AC9E3583D511A21F0008C7E6210602679F38@daemsg02.software-ag.de>
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

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:45:09 UTC