XQuery method question, trying to sum values read from xml

Posted by Buck on Stack Overflow See other posts from Stack Overflow or by Buck
Published on 2009-12-11T06:37:48Z Indexed on 2010/03/16 17:01 UTC
Read the original article Hit count: 376

Filed under:

I'm pretty new to XQuery and I'm trying to write an example function that I can't get to work. I want to read an xml file, parse out the "time" values, sum them as they're read and return the sum. This is trivial and I'm looking to build more functionality into it but I'd like to get this working first. Also, I know there's a "sum" directive in XQuery that would do just this but I want to add more to it so the built-in sum is insufficient for my needs.

Here's my funtion:

bool
example(Zorba* aZorba)
{
   XQuery_t lQuery = aZorba->compileQuery(
                        "for $i in fn:doc('/tmp/products.xml')//time"
                         "let $sum := xs:integer($i)"
                                 " return $sum"
);

  DynamicContext* lCtx = lQuery->getDynamicContext();

  lCtx->setContextItemAsDocument("temp_measurements.xml", lDocStream);

  try {
    std::cout << lQuery << std::endl;
  } catch (DynamicException& e) {
    std::cerr << e.getDescription() << std::endl;
    return false;
  } catch (StaticException& f){
        std::cerr << f.getDescription() << f.getErrorCodeAsString(f.getErrorCode()) << std::endl;
        return false;
  }
}

It's called with an appropriate main(). If I comment out the line that starts "let $sum..." then this works in that it returns the time values as a series of integers like this: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3....

Input file looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<temps>
  <temp>
    <time>0</time>
    <lat>0</lat>
    <long>0</long>
    <value>0</value>
  </temp>
  <temp>
    <time>1</time>
    <lat>0</lat>
    <long>1</long>
    <value>0</value>
  </temp>
 ...

© Stack Overflow or respective owner

Related posts about xquery