W3C home > Mailing lists > Public > www-ql@w3.org > July to September 2005

Re: XQuery - XPath: Get position of Element TAG (not element)

From: Jule Kleine <listmail@web.de>
Date: Tue, 16 Aug 2005 22:56:10 +0200
Message-Id: <574407324@web.de>
To: www-ql@w3.org


HI,

I got these two hints which was exactly what I needed.
Thanks so much.

Jule


--------------------

> [...]
> I would like to check, if the name of the second element of a parent element is "youngestSon". Is it possible to query this with xpath/xquery (I use xquery with xpath-expressions, in fact I already know the name of the element but want to get sure with an exist-statement, that the element's position is 2) ?
>
> <parent>
> <oldestSon>A</oldestSon>
> <youngestSon>B</youngestSon>
> </parent>

Is this useful?

let $a :=
<parent>
<oldestSon>A</oldestSon>
<youngestSon>B</youngestSon>
</parent>
return $a/*[2] intersect $a/youngestSon

Best wishes,
--Torsten
-- 
| Prof. Dr. Torsten Grust grust@in.tum.de |
| http://www-db.in.tum.de/~grust/ |
| Database Systems - Technische Universität München (Germany) |


----------------------------------



philippe michiels <philippe.michiels@gmail.com> schrieb am 16.08.05 13:49:17:
> 
> Hi,
> 
> Is this the sort of expression you are looking for?
> 
> for $parent in doc("sample.xml")/parent
> where $parent/oldestSon and  $parent/*[2]/self::youngestSon
> return <success/>
> 
> Note that XPath has implicit existential semantics, you don't need to
> write the exists-calls every time.
> The expression $parent/*[2]/self::youngestSon checks wether the second
> child of parent is a youngestSon and returns it if it exists.
> 
> Best
> Ph
> 
> On 8/16/05, Jule Kleine <listmail@web.de> wrote:
> > 
> > 
> > Hi,
> > 
> > I would like to check, if the name of the second element of a parent element is "youngestSon". Is it possible to query this with xpath/xquery (I use xquery with xpath-expressions, in fact I already know the name of the element but want to get sure with an exist-statement, that the element's position is 2) ?
> > 
> > <parent>
> > <oldestSon>A</oldestSon>
> > <youngestSon>B</youngestSon>
> > </parent>
> > 
> > Note, that the child element names are different. What I dont need is the second son in the following example (therefor I could use /parent/son[position()==2] )
> > 
> > <parent>
> > <son>A</son>
> > <son>B</son>
> > </parent>
> > 
> > ----
> > My XQuery is:
> > 
> > xquery version "1.0";
> > 
> > for $parent in doc("sample.xml")/parent
> > let $oldestson:= $parent/oldestSon
> > let $youngestson:= $parent/youngestSon
> > 
> > where (
> > exists($parent)
> > and exists($oldestson)
> > and exists($youngestson)
> > )
> > 
> > return (
> > <success/>
> > )
> > 
> > -----
> > The Query checks, if in the sample-document there exists a parent with oldestSon and youngestSon, but doesnt make sure, that oldestSon comes before youngestSon. I could use
> > 
> > where $oldestson < $youngestson
> > 
> > but have cases where I dont know all elements (and therefor nothing about oldestson), so would like something like
> > 
> > where $youngestson "IS SECOND CHILD OF PARENT"
> > 
> > 
> > 
> > Thank you for any help!!!
> > 
> > Jule
> > 




_________________________________________________________________________
Mit der Gruppen-SMS von WEB.DE FreeMail können Sie eine SMS an alle 
Freunde gleichzeitig schicken: http://freemail.web.de/features/?mc=021179
Received on Tuesday, 16 August 2005 20:56:25 GMT

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