0

我正在尝试创建一个包含另一个引用的新引用,如 ${var${randnum}}。最终,我想创建一个变量,它指的是两倍的随机变量集。由于上述方法不起作用,我进一步开发了它,结果如下。

在我写的计算字段中
concat('$','{','trust',${rand_no2},'_' ,${rand_no3_1},'}')

这应该导致
${trust1_1}
和各自的组合。

如果没有第 11 行 (name=ref2),文件将编译,我可以在手机上的 ODK Collect (v.2.4) 中启动它。但是,当我到达第 10 行(在 ODK Collect 中)时,我收到消息:“错误发生在 s 中的依赖循环;超出递归限制!!” (我包括第 11 行以显示我最后想要做什么。)

我正在用 Excel 编写文件并使用 ODK xlsform 离线编译它。(为了测试,我通过电缆将它传输到我的手机。)

可在此处找到用于复制的 xls 文件: https ://forum.getodk.org/t/concatenate-references-to-create-new-reference-var-randnum/34968

非常感谢您!

4

1 回答 1

1

您正在混淆与 ${q} 语法、问题名称和问题值相关的一些内容。

请注意,ODK Collect 实际上并不理解 ${q} 语法(仅限 XLSForm)。查看 ODK 收集的称为 XForm 的实际表单格式会很有帮助,这是一种 XLSForm 转换成的 XML 格式。但是,即使 ODK Collect 理解 ${q} 语法,您的方法仍然不起作用,因为您正在为 ref 问题创建字符串值(使用 concat)。这不会神奇地被评估为参考/公式。您不能动态创建引用或公式。

目前(直到 ODK 支持类似 local-name() 函数),也许最好的方法是使用位置并将计算的值放在一个组中。也许像 //group/calc[number(${pos})] 这样的东西。请注意,位置是基于 1 的(因此第一项是位置 1)并且需要将位置转换为数字或整数。

于 2021-09-08T18:06:46.847 回答