Thanks a lot folks... I still dont clearly understand the fundamentals of braces in this language.. May be i should start biting the books / WHich I will.. I am hoping to be contributing to this list in like 4-5 months. Thanks again.. Your solution works.. Vasu
On Tue, Sep 4, 2012 at 10:44 AM, Peter Stadler < [email protected]> wrote: > An alternative would be to use string-join(). First join all the strings > and then calculate the length: > {string-length(string-join($ltnfiles//subtopic[@id = > 'DEF']/short-definition/p/text), '')} > > All the best > Peter > > PS: A great resource for xquery functions is > http://www.xqueryfunctions.com/ > You will find lots of stuff there ... > > Am 04.09.2012 um 11:37 schrieb John Snelson: > > > You're close - the missing part is that you want to use the sum() > function, ie: > > > > <short-desc>{ > > sum( > > for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//short-definition > > return string-length($shrtdesc/p/text) > > ) > > }</short-desc> > > > > John > > > > On 04/09/12 10:15, Mailing Lists Mail wrote: > >> Dear Xquery Adults, > >> > >> I am very new here.. I have some issues with getting my requirements > >> working.. I guess, this should be very simple, but dont seem to get my > >> heads around... THe following is what I want.. > >> > >> I have loads of XMLs in the Data Store ( markLogic) > >> > >> I have to run a query to do the return the string lengths of certain > >> elements from 100 XMLs./ > >> > >> So my pseudo code will be : > >> > >> <results> > >> For all XMLs in the Data store > >> { > >> > >> <file filename = "filename of the current file "> > >> > >> <desc> {length of desc at //xx/y/desc } > >> <!-- > >> There could be more than one desc, in which case, i would like the > >> sum of all the string lengths of each desc > >> --> > >> </desc> > >> > >> <short-desc> > >> { > >> string-length ( //xx//yy/short-desc) > >> } > >> > >> </short-desc> > >> > >> </file> > >> > >> </results> > >> > >> > >> My attempts: > >> > >> > >> declare namespace dict = "http://www.lexis-nexis.com/glp/dict"; > >> for $ltnfiles in doc() > >> let $NAME:= document-uri($ltnfiles) > >> return ( > >> <ltn > > >> <name> > >> {$NAME} > >> </name> > >> <short-desc> > >> {string-length(string($ltnfiles//subtopic[@id = > >> 'DEF']/short-definition/p/text))} > >> </short-desc> > >> </ltn> > >> ) > >> THe above works fine, if there is only one short-definition.. FOr more > >> than one shortdefiitions, it comes up with the error message obviously > >> because the string does not allow 2 arguments, while the stuff passed > >> into the function is a sequence... > >> > >> How do I do another loop inside the first one, for each short-defiitin > >> ... SOmething like : > >> > >> for $ltnfiles in doc() > >> let $NAME:= document-uri($ltnfiles) > >> return ( > >> <ltn > > >> <name> > >> {$NAME} > >> </name> > >> { > >> for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//short-definition > >> <short-desc> > >> { > >> string-length( $shrtdesc/p/text) > >> } > >> </short-desc> > >> } > >> </ltn> > >> ) > >> DOEstNT WORK .. :( This wont give me what I want as What I want is a > >> sum (string-lengths of all the short-def) .. But atleast i thought i > >> would get something like > >> > >> <short-desc>100</short-desc> > >> <short-desc>344</short-desc> > >> > >> ( I would have liked <short-desc>444</short-desc> ) > >> > >> ANy help would be highly appreciated .. > >> > >> Thanks > >> > >> Dak. > >> > >> > > > > > > -- > > John Snelson, Lead Engineer http://twitter.com/jpcs > > MarkLogic Corporation http://www.marklogic.com > > _______________________________________________ > > [email protected] > > http://x-query.com/mailman/listinfo/talk > > -- > Peter Stadler > Carl-Maria-von-Weber-Gesamtausgabe > Arbeitsstelle Detmold > Gartenstr. 20 > D-32756 Detmold > Tel. +49 5231 975-665 > Fax: +49 5231 975-668 > stadler at weber-gesamtausgabe.de > www.weber-gesamtausgabe.de > > > > > >
_______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk
