Here is what Stumps me about the braces.. Since JOhn's solution worked, I
wanted to do the same for other element lengths...
so I did

<short-desc>{
  sum(

    for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//short-definition
    return string-length($shrtdesc/p/**text)
  )
}</short-desc>


<long-desc>{
  sum(

    for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//long-definition
    return string-length($shrtdesc/p/**text)
  )
}</long-desc>


Ended up getting the following error...

At line 24 column 3:

22.
23. <long-desc>
24. {
25. sum(
26.


ANy Ideas please?






On Tue, Sep 4, 2012 at 10:37 AM, John Snelson <[email protected]>wrote:

> 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<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<http://x-query.com/mailman/listinfo/talk>
>
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk

Reply via email to