我有一个xquery函数,该函数使用concat()作为字符串动态构建xquery并返回该字符串。执行时查询输出将返回一系列行。我希望能够执行此函数的输出作为for..in循环的输入,该循环将遍历各行并产生最终输出。我无法弄清楚如何获取for..in循环来执行第一个查询的字符串输出。我正在使用xbase,如果可能的话,我想使用通用解决方案。
我试图找到一个执行该字符串的评估或执行函数,类似于SQL的exec()命令,并且只找到xhive:evaluate()。我找不到它的代码(可能是专有的)或“ xhive:”所引用的库,所以无法导入它。
第一个查询如下:
declare function ps:searchQuery() as xs:string
{
if ($aliasin) then
concat (
'for $app in /CE/APP/ROW ',
'for $e in /CE/ENTITY/ROW[id = $app/entity] ',
iau:where( iau:textEq( '$app/alias',$aliasin)),
' return <row> { $app/entity } { $e/name } { $app/alias } { $app/backup_alias } { $app/approval_order } {$app/buyer} </row> ')
else ()
};
我想这样使用它:
let $rows :=
for $urow in somenamespace:evaluate(ps:searchQuery())
let ...
return
<row id="{string($AliasName)}"> ...
</row>
有没有办法像这样普遍评估?
最终输出将是由searchQuery()返回的行,其格式正确且已重命名,这没问题。但是要执行该字符串是
答案 0 :(得分:0)
没有标准功能,但是许多XQuery处理器都具有某种扩展功能。例如,在撒克逊语中,您可以使用2/3
来准备查询,并使用saxon:compile-query()
来执行查询。