我對XQuery來說很新,而且我正試圖編寫一個我無法工作的示例函數。 我想讀取一個xml文件,解析出「時間」值,在讀取它們時求和並返回總和。 這是微不足道的,我正在尋求建立更多的功能,但我想先得到這個工作。 另外,我知道在XQuery中有一個「sum」指令,它可以做到這一點,但我想增加更多的指令,所以內置的和不足以滿足我的需求。XQuery方法,試圖總結從xml中讀取的值
這裏是我的功能:
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; } }
它用合適的主稱爲()。如果我註釋掉開始「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 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> ...