我对 XQuery 很陌生,我正在尝试编写一个我无法开始工作的示例函数。我想读取一个 xml 文件,解析出“时间”值,在读取它们时对它们求和并返回总和。这是微不足道的,我希望在其中构建更多功能,但我想先让它工作。另外,我知道 XQuery 中有一个“sum”指令可以做到这一点,但我想向它添加更多内容,因此内置 sum 不足以满足我的需要。
这是我的功能:
布尔
示例(Zorba* aZorba)
{
XQuery_t lQuery = aZorba->compileQuery(
"for $i in fn:doc('/tmp/products.xml')//time"
“让 $sum := xs:integer($i)”
“返回$总和”
);
DynamicContext* lCtx = lQuery->getDynamicContext();
lCtx->setContextItemAsDocument("temp_measurements.xml", lDocStream);
尝试 {
std::cout << lQuery << std::endl;
} 捕捉(动态异常和 e){
std::cerr << e.getDescription() << std::endl;
返回假;
} 捕捉 (StaticException& f){
std::cerr << f.getDescription() << f.getErrorCodeAsString(f.getErrorCode()) << std::endl;
返回假;
}
}
使用适当的 main() 调用它。如果我注释掉以“let $sum ...”开头的行,那么它的工作原理是它将时间值作为一系列整数返回,如下所示: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....
输入文件如下所示:
<?xml 版本="1.0" 编码="UTF-8"?>
<临时>
<温度>
<时间>0</时间>
<lat>0</lat>
<long>0</long>
<值>0</值>
</temp>
<温度>
<时间>1</时间>
<lat>0</lat>
<long>1</long>
<值>0</值>
</temp>
...