根据所选答案计算并更新分数

Calculate and updated a score according to selected answer

我是 ODK 和 XLSForms 的新手。

我有几个问题,根据答案,我需要计算一个分数。

我有17道题,每次有人回答是,我需要在整数字段中加2分。

所以我有:

type                name  label           appearnce           required

select_one yes_no1  q1    //question here //appearance quick //required yes

...

select_one yes_no17 q17 ...

这里是得分字段:

type      name    label

calculate total   Total

这是我工作中的第一个作业,不知道如何根据所选答案计算和更改值。

编辑

我添加了一个计算表达式,但不知道如何得到结果,因为它不起作用:

if ((${q8} = 'yes' or ${q9} ='yes' or ${q11}='yes'), 2, 0)

所以如果第8、9、11题的回答是肯定的,则当前值加2分,但该字段根本没有出现。如果第10、12、13、14题回答yes每题加1分,还需要加分。

简单但繁琐的方法是使用 if() 语句为每个问题创建一个计算,将计算值设置为 2 或 0。可以通过将计算项相加来获得最终结果.

执行此操作的最酷方法是在一个 XPath 表达式中完成所有操作。基本上你想创建一个包含所有 17 个问题的节点集,将这些问题过滤为值为 'yes' 的问题,计算过滤后的节点集并乘以 2。你可以在 XLSForm 中执行此操作,但我不确定你是否可以使用${node} shorthand.

您必须将所有问题放在一个组中(不需要组标签),然后您可以执行以下操作:

count(${grp}/*[text() = 'yes']) * 2

或没有 ${node} 快捷方式(检查 XForm 以获得正确的路径):

count(/myform/grp/*[text() = 'yes']) * 2

我不确定使用 text() 是否会通过 ODK 验证。如果没有,可能会有一个表达式会通过并执行相同的操作。 (但是,上述语法在 Enketo 中有效)。