有没有一种方法可以让xquery for ... in循环评估由另一个函数动态创建为字符串的xquery?

时间:2019-07-17 17:31:59

标签: xquery

我有一个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()返回的行,其格式正确且已重命名,这没问题。但是要执行该字符串是

1 个答案:

答案 0 :(得分:0)

没有标准功能,但是许多XQuery处理器都具有某种扩展功能。例如,在撒克逊语中,您可以使用2/3来准备查询,并使用saxon:compile-query()来执行查询。