XQuery:从字符串(属性值)生成变量名

XQuery:从字符串(属性值)生成变量名,xquery,Xquery,我有一个运行xquery的框架,它包括一个XML配置文件,该文件将我可以在查询中使用的参数定义为变量,如下所示: <text name="myVar" label="My Var"/> (上述方法显然不起作用) 怎么可能呢?嗯,变量名(如$myVar)只能静态定义,因此这是不可能的,除非您从配置文件中找到的内容以编程方式生成查询的源代码 我想我在这里要做的是将参数作为映射传递: declare variable $params as map(xs:string, item()*);

我有一个运行xquery的框架,它包括一个XML配置文件,该文件将我可以在查询中使用的参数定义为变量,如下所示:

<text name="myVar" label="My Var"/>
(上述方法显然不起作用)


怎么可能呢?

嗯,变量名(如
$myVar
)只能静态定义,因此这是不可能的,除非您从配置文件中找到的内容以编程方式生成查询的源代码

我想我在这里要做的是将参数作为映射传递:

declare variable $params as map(xs:string, item()*);
do-something-with($params('myVar'));

可以静态地
($params?myVar)
或动态地
($params('myVar'))

访问映射中的条目。您可以提供一些额外的上下文或显示来自该模块的更多代码,以及您使用的XQuery引擎(Saxon、BaseX、MarkLogic等)?我的查询构成生成的XQuery的一部分,然后在存储CMS数据的Marklogic上运行。CMS有很多XML形式的配置,我可以访问这些配置(除了我实际需要查询的集合之外),其中一个由Java模块使用,Java模块生成XQY,然后将我自己的查询嵌入其中(实际上,XQuery代码片段本身并不完整;所有名称空间、导入和外部变量定义都是在运行时为其生成的)。谢谢你,Michael。我猜变量本身是按照你建议的方式由运行我的查询的代码生成的。它读取配置,生成一个带有相应命名的外部变量的XQuery,将它们设置为用户给定的值,然后将我的查询嵌入其中并运行整个shebang。因此,在另一个di中没有办法也可以吗?我的意思是,从变量本身获取一个字符串形式的变量名?(我意识到这听起来完全是胡说八道,但我在XML世界中看到了奇妙的事情)。不,对不起,在查询执行时,变量名不以任何方式可用。(与XQ 3.0中的函数名不同!)好吧,很高兴知道。我想我得求助于,嗯,想想办法。
declare variable $params as map(xs:string, item()*);
do-something-with($params('myVar'));