合并引用以创建新的引用,如 ${var${randnum}}

Combine references to create new reference like ${var${randnum}}

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

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

结果应该是
${trust1_1}
以及各自的组合。

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

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

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

非常感谢您!

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

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

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