我有一个简单的问题。我正在计算修订列表中的最新版本。
<xforms:instance id="history">
<metaData>
<latestVersion></latestVersion>
<History>
<Revision>
<Date>01/02/2011</Date>
<Comments>Mino Issues Fixed</Comments>
<Version>0.4</Version>
</Revision>
<Revision>
<Date>17/02/2011</Date>
<Comments>Minor issues fixed</Comments>
<Version>2.1</Version>
</Revision>
<Revision>
<Date>22/03/2011</Date>
<Comments>Cosmetic Defects Fixed</Comments>
<Version>2.2</Version>
</Revision>
<Revision>
<Date>06/04/2011</Date>
<Comments>minor issues fixed</Comments>
<Version>2.3</Version>
</Revision>
<Revision>
<Date>20/04/2011</Date>
<Comments>minor issues fixed</Comments>
<Version>2.4</Version>
</Revision>
<Revision>
<Date>22/04/2011</Date>
<Comments>Small build</Comments>
<Version>3.0</Version>
</Revision>
</History>
</metaData>
</xforms:instance>
<xforms:bind nodeset="instance('history')/latestVersion"
type="xforms:decimal"
calculate="max(instance('history')/History/Revision/Version/number())" />
当我输出latestVersion时,它显示为3.00
。如果我删除绑定定义中的type
,则会显示为3
。如何将其显示为3.0
答案 0 :(得分:4)
有三件事需要考虑:
latestVersion
中的值的格式是首先,由于您的版本号是小数,因此您应始终将它们视为小数。因此,您不应使用number()
函数,该函数始终返回xs:double
。您应该将表达式重写为:
max(instance('history')/History/Revision/Version/xs:decimal(.))
其次,执行此操作时,存储在latestVersion
中的值将保证为xs:decimal
格式。在这里,它将是3
。
第三,您如何向用户展示该价值?您必须确保其格式正确。如果你写:
<xforms:output ref="latestVersion"/>
xforms:output
查看值的类型,注意它是decimal
类型,并根据十进制类型的默认格式对其进行格式化,请参阅properties-xforms.xml。
十进制类型的默认格式为:
format-number(xs:decimal(.),'###,###,###,##0.00')
如果你想要一个十进制格式,你可以覆盖properties-local.xml中的属性,或使用像@grtjn建议的那样:
<xforms:output value="format-number(instance('history')/latestVersion, '#.0')"/>
或者:
<xforms:output value="format-number(instance('history')/latestVersion, '#,###.0')"/>
答案 1 :(得分:1)
您可以使用<xforms:output>
使用value
属性而不是ref
或bind
来调整演示文稿。该属性的值是一个表达式,可能包含对format-number()
的调用。例如:
<xforms:output value="format-number(instance('history')/latestVersion, '#.0')"/>
注意:对格式编号的支持可能取决于实现,但我认为Orbeon支持它。