[xquery-talk] xquery distinct-values

Michael Kay mhk at mhk.me.uk
Mon Apr 10 09:18:37 PDT 2006


> First, please accept my apologies if this is the wrong place to post.

It's the right place to post. Is your name really Jane Doe?

I think the following works:

declare variable $f1 := doc("file1.xml");
declare variable $f2 := doc("file2.xml");
$f1/namelist/person
  [count(distinct-values(for $x in carids return $f2/id($x)/style)) gt 1]
  /name

assuming that @id is an ID attribute

Michael Kay
http://www.saxonica.com/

> 
> I have two xml files.
> 
> file1.xml has
> <namelist><person>
> <name>John</name>
> <carids>1</carids>
> <carids>3</carids>
> <carids>4</carids>
> </person></namelist>
> 
> file2.xml has
> <carlist>
> <car id='1'>
> <style>sedan</style>
> <car id='3'>
> <style>coupe</style>
> <car id='4'>
> <style>sedan</style>
> </carlist
> 
> I am trying to write an xquery that will return the names 
> with more than 2 
> of any style:
> 
> for $x in doc("file1.xml")/namelist/person
> let $y := doc("file2.xml")/carlist/car[@id=$x/carids]
> for $value in ($y/style)
> where count($y/style[.=$value]) ge 2
> order by ($x/name) descending
> return <name>{data($x/name)}</name>
> 
> This returns the names of everyone with more than 2 of any 
> style, but it 
> returns that same name multiple times (in relation to the number of 
> duplicate styles).
> 
> I hope it's not too confusing, and I appreciate any help you 
> can give me.
> 
> Thanks,
> D
> 
> _________________________________________________________________
> Express yourself instantly with MSN Messenger! Download today 
> - it's FREE! 
> http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
> 
> _______________________________________________
> talk at xquery.com
> http://xquery.com/mailman/listinfo/talk
> 




More information about the talk mailing list