私はXQueryにかなり慣れていないので、動作させることができないサンプル関数を作成しようとしています。xmlファイルを読み取り、「時間」値を解析し、読み取ったときにそれらを合計して、合計を返したいと思います。これは些細なことであり、より多くの機能を組み込むことを検討していますが、最初にこれを機能させたいと思います。また、XQueryにはこれを実行する「sum」ディレクティブがあることは知っていますが、さらに追加したいので、組み込みの合計ではニーズに対応できません。
これが私の関数です:
ブール 例(Zorba * aZorba) {{ XQuery_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 << lQuery << std :: endl; } catch(DynamicException&e){ std :: cerr << e.getDescription()<< std :: endl; falseを返します。 } catch(StaticException&f){ std :: cerr << f.getDescription()<< f.getErrorCodeAsString(f.getErrorCode())<< std :: endl; falseを返します。 } }
適切な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 2 3 3 3 3 3 3 3 3 3 ... ..
入力ファイルは次のようになります。
<?xml version = "1.0" encoding = "UTF-8"?> <臨時雇用者> <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> ..。