我是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分。
答案 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中可以使用。)