Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XQuery方法,尝试对从xml读取的值求和_Xquery - Fatal编程技术网

XQuery方法,尝试对从xml读取的值求和

XQuery方法,尝试对从xml读取的值求和,xquery,Xquery,我对XQuery非常陌生,我正在尝试编写一个无法使用的示例函数。 我想读取一个xml文件,解析出“时间”值,在读取时求和,然后返回和。 这是微不足道的,我希望在其中构建更多的功能,但我想先让它工作起来。 另外,我知道XQuery中有一个“sum”指令可以实现这一点,但我想添加更多指令,这样内置的sum就不足以满足我的需要 以下是我的功能: bool example(Zorba* aZorba) { XQuery_t lQuery = aZorba->compileQuery(

我对XQuery非常陌生,我正在尝试编写一个无法使用的示例函数。 我想读取一个xml文件,解析出“时间”值,在读取时求和,然后返回和。 这是微不足道的,我希望在其中构建更多的功能,但我想先让它工作起来。 另外,我知道XQuery中有一个“sum”指令可以实现这一点,但我想添加更多指令,这样内置的sum就不足以满足我的需要

以下是我的功能:

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; } } 布尔 示例(Zorba*aZorba) { XQuery\u t lQuery=aZorba->compileQuery( “对于fn:doc('/tmp/products.xml')//time中的$i” “设$sum:=xs:integer($i)” “返回$sum” ); DynamicContext*lCtx=lQuery->getDynamicContext(); lCtx->setContextItemAsDocument(“temp_measurements.xml”,lDocStream); 试一试{
std::cout我自己对XQuery是一个相对新手,但我感到惊讶的是,在LISP中,缺少map()函数来获取一系列值并将它们组合成一个,传递组合函数。在LISP中,我想您可能需要类似“(map'+(0 0 1 2 3 1 2))”。您可以在XQuery中执行类似操作,但必须自己编写:

declare function local:sum-times($seq)
{
  if (count($seq) < 2)
  then
    subsequence($seq, 1, 1)
  else
    subsequence($seq, 1, 1) + local:sum-times(subsequence($seq, 2))
};
declare function local:sum times($seq)
{
如果(计数($seq)<2)
然后
子序列($seq,1,1)
其他的
子序列($seq,1,1)+本地:总和时间(子序列($seq,2))
};

因此,您可以编写“local:sum times(对于fn:doc()中的$i…)”。基本上,这会重新创建您提到的sum()函数,但现在您可以进行所需的更改。

看起来您想要使用fn:sum

像这样:

fn:sum(
    (
        1, 1, 1, 1, 0, 0, 1, 0
    ), 
    0
)
更多信息请点击此处:

fn:sum(
    (
        1, 1, 1, 1, 0, 0, 1, 0
    ), 
    0
)