W3C home > Mailing lists > Public > www-ql@w3.org > January to March 2004

RE: how to write such xquery?

From: Michael Kay <mhk@mhk.me.uk>
Date: Fri, 5 Mar 2004 14:51:52 -0000
To: "'Chen Yabing'" <iscp0054@nus.edu.sg>, <www-ql@w3.org>
Message-Id: <20040305145204.C04CAA17EB@frink.w3.org>
Your example creates a copy of the input in which all elements except <d
dno="d001"> have been copied. I can't see how this relates to the problem as
you have described it.

 

However, the general answer is that to do this kind of transformation you
need to use the same kind of technique as you would use in XSLT, that is a
recursive tree walk, but using functions rather than template rules. As you
process each level of the tree, you create a new element node with the same
name as the input node, and then apply the function recursively to those
children that you want to copy, excluding those you want to discard.

 

Michael Kay

 

  _____  

From: www-ql-request@w3.org [mailto:www-ql-request@w3.org] On Behalf Of Chen
Yabing
Sent: 05 March 2004 12:29
To: www-ql@w3.org
Subject: how to write such xquery?

 

Suppose I have a document as follows:

 

<a ano="a001">

   <b bno="b001">

       <c cno="c001"/>

       <d dno="d001"/>

       <d dno="d002"/>

   </b>

   <b bno="b002">

       <c cno="c002"/>

       <d dno="d002"/>

   </b>

</a>

 

I would like to write a query to retrieve those elements from top to down
that has sub element <d> whose dno = "d002". That is, I want the result like
this:

 

<a ano="a001">

   <b bno="b001">

       <c cno="c001"/>

       <d dno="d002"/>

   </b>

   <b bno="b002">

       <c cno="c002"/>

       <d dno="d002"/>

   </b>

</a>

 

How to write such a query in a simple XQuery? Can I use filter function?

Thanks in advance.
Received on Friday, 5 March 2004 09:52:05 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 22 July 2006 00:10:19 GMT