orbeon - XForms:使用循环为所有列表项插入子项

标签 orbeon xforms

如果我有一个 XForms 实例,例如

<xforms:instance id="myvrs">
    <myvrs>
        <subitem />
    </myvrs>
</xforms:instance>
<xforms:instance id="tmp">
    <temp>
        <item><subitem>11</subitem></item>
        <item><subitem>21</subitem><subitem>22</subitem></item>
        <item></item>
    </temp>
</xforms:instance>

如何使用类似的循环

<xforms:trigger>
    <xforms:label>button</xforms:label>
    <xforms:action events:event="DOMActivate">
    forall in instance('tmp')/item
        <xforms:insert context="instance('tmp')/item" origin="instance('myvrs')/subitem" />
    endforall
    </xforms:action>
</xforms:trigger>

我可以获得实例

<xforms:instance id="tmp">
    <temp>
        <item><subitem>11</subitem><subitem></subitem></item>
        <item><subitem>21</subitem><subitem>22</subitem><subitem></subitem></item>
        <item><subitem></subitem></item>
    </temp>
</xforms:instance>

谢谢

最佳答案

要在 XForms 1.1 中进行迭代,您需要使用 while 属性(请参阅 10.18 Iteration of XForms Actions )。

在您的情况下,可以通过额外的实例来完成:

<xf:instance id="iterator">
    <iterator xmlns=""></iterator>
</xf:instance>

然后操作可以是:

<xf:action ev:event="DOMActivate">
    <xf:setvalue ref="instance('iterator')" value="1"></xf:setvalue>
    <xf:action while="instance('iterator') &lt; count(instance('tmp')/item)">
        <xf:insert context="instance('tmp')/item[position()=instance('iterator')]"
            origin="instance('myvrs')/subitem" nodeset="subitem" position="after"></xf:insert>
        <xf:setvalue ref="instance('iterator')" value="instance('iterator') + 1"></xf:setvalue>
    </xf:action>
</xf:action>

请注意,这是标准 XForms 1.1,应该与其他实现一起使用。

完整的 XForms 是:

<html xmlns:xf="http://www.w3.org/2002/xforms" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <head>
        <title>Insert for all</title>
        <xf:model>
            <xf:instance id="myvrs">
                <myvrs xmlns="">
                    <subitem></subitem>
                </myvrs>
            </xf:instance>
            <xf:instance id="tmp">
                <temp xmlns="">
                    <item>
                        <subitem>11</subitem>
                    </item>
                    <item>
                        <subitem>21</subitem>
                        <subitem>22</subitem>
                    </item>
                    <item></item>
                </temp>
            </xf:instance>
            <xf:instance id="iterator">
                <iterator xmlns=""></iterator>
            </xf:instance>
        </xf:model>
    </head>
    <body>
        <xf:trigger>
            <xf:label>button</xf:label>
            <xf:action ev:event="DOMActivate">
                <xf:setvalue ref="instance('iterator')" value="1"></xf:setvalue>
                <xf:action while="instance('iterator') &lt; count(instance('tmp')/item)">
                    <xf:insert context="instance('tmp')/item[position()=instance('iterator')]"
                        origin="instance('myvrs')/subitem" nodeset="subitem" position="after"></xf:insert>
                    <xf:setvalue ref="instance('iterator')" value="instance('iterator') + 1"></xf:setvalue>
                </xf:action>
            </xf:action>
        </xf:trigger>
        <fr:xforms-inspector xmlns:fr="http://orbeon.org/oxf/xml/form-runner"></fr:xforms-inspector>
    </body>
</html>

关于orbeon - XForms:使用循环为所有列表项插入子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21187112/

相关文章:

Orbeon Form Builder - 引用部分模板中的控件

css - XForms:标签的 CSS

forms - Orbeon Form 支持泰语吗?

xpath - Orbeon 形式 : How to check if yes-no answer is no (not empty or no! )

xforms Mindate 在日期选择器上

xpath - 如何计算 XPath 或 XQuery 中的加权平均值?

mysql - 限制访问用户并从数据库加载数据

xslt - 如何向所有子节点插入属性

asp.net - 服务器端 XForms 表单验证和集成到 ASP.NET