xquery - 有没有办法让 xquery for...in 循环来评估由另一个函数动态创建为字符串的 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() 返回的行正确格式化和重命名,这没问题。但是要执行的字符串是。
解决方案
对此没有标准功能,但许多 XQuery 处理器都有某种扩展可以做到这一点。例如,在 Saxon 中,您可以使用saxon:compile-query()
来准备查询并saxon:query()
执行它。
推荐阅读
- sql - 将多个查询与 4 个连接结合起来?
- javascript - 如何使用 puppeteer 获取鼠标位置
- javascript - characters.map 不是函数
- javascript - 如何在点击时显示 0:00 而不是 NaN:NaN
- ios - 如何在 Swift 中屏蔽 UIStackView?
- swift - UIStackView() 不显示
- java - 如何单个函数调用多个活动?
- android - 为什么我的编辑文本启用时没有出现闪烁的光标?
- c++ - Codeforces 中的左撇子、右撇子和 Ambidexters 问题给了我一个错误
- azure - 是否可以使用 Azure 网络安全组仅允许从 Web 应用访问数据库 VM?