根据所选答案

时间:2017-04-11 05:52:29

标签: odk odk-xform

我是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的回答是肯定的话,仍然需要添加,以便为每个问题添加1分。

1 个答案:

答案 0 :(得分:1)

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

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

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

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url=http-remoting://127.0.0.1:8080 jboss.naming.client.ejb.context=true

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

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

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

相关问题