Xpath 中继器(新重复)控件内的计算
Orbeon form builder中的表单包含一个repeater控件(新建repeat)。假设repeater控件(新建repeat)的每行(或repeat)上有三个文本控件.每行的前两个文本控件包含数值。我希望在运行时将前两个文本控件的乘积带到第三个文本控件,而不发生任何事件。运行时将有多个重复次数,i、 e行可能会增加,但对于每一行,计算在运行时会有很大的反映,对于每一行,必须在第三行上查看前两行的乘积 我使用了以下代码:Xpath 中继器(新重复)控件内的计算,xpath,orbeon,xforms,Xpath,Orbeon,Xforms,Orbeon form builder中的表单包含一个repeater控件(新建repeat)。假设repeater控件(新建repeat)的每行(或repeat)上有三个文本控件.每行的前两个文本控件包含数值。我希望在运行时将前两个文本控件的乘积带到第三个文本控件,而不发生任何事件。运行时将有多个重复次数,i、 e行可能会增加,但对于每一行,计算在运行时会有很大的反映,对于每一行,必须在第三行上查看前两行的乘积 我使用了以下代码: if ($quantity castable as xs:do
if ($quantity castable as xs:double and $price castable as xs:double)
then $quantity * $price
else 'n/a'
当repeater控件中只有一行时,可以使用此xpath表达式。但是在添加新行时,即在运行时增加repeat,所有结果都会导致第三列的控件更改为else值(“n/a”)。这仅适用于中继器控件(新重复)的单行。因为对于每一次重复,必须分别计算每一行的值。假设这是为每一行重复的节点
<repeater>
<quantity></quantity>
<price></price>
<product></product>
</repeater>
当在计算中为
节点使用此表达式时,将在每一行上生成乘积,并且不需要基于事件的操作,因为此表达式写在节点的绑定定义上
希望这能回答你所有的问题
if(../quantity castable as xs:double and ../price castable as xs:double)
then ../quantity * ../price
else 'N/A'