在循环XForms 1.1中重写数据

时间:2015-08-10 10:53:10

标签: xforms

我需要将数据从一个模型重写到另一个模型。两种模型都有不同的名称空间,例如

<xf:instance id="mainDoc1">
    <doc1:Document>
        <doc1:User>name1</doc1:User>
        <doc1:User>name2</doc1:User>
        ...
        <doc1:User>nameN</doc1:User>
    </doc1:Document>
    ...
 </xf:instance>

 <xf:instance id="mainDoc2">
    <doc2:Document>
        <doc1:User/>
    </doc2:Document>
    ...
 </xf:instance>

当我按下时 表单数据上的按钮(触发器)正在从mainDoc1读取(此功能已完成),但现在我需要将一些数据写入实例mainDoc2。我需要doc1:Document的一些循环,因为我不知道可以有多少doc1:User个元素。

所有这些都应该在读取mainDoc1的数据的同一触发器中完成。

1 个答案:

答案 0 :(得分:0)

您可以使用xf:insert操作执行此操作。您不需要循环,因为该操作一次可以复制多个XML节点:

<xf:trigger>
    <xf:label>Do it!</xf:label>
    <xf:action ev:event="DOMActivate">
        <xf:insert
            context="instance('mainDoc2')"
            ref="*"
            origin="instance('mainDoc1')/doc1:User"/>
    </xf:action>
</xf:trigger>

说明:

  • context属性表示&#34;插入&#34;这个元素
  • ref属性表示&#34;插入&#34;这些元素
  • origin属性表示&#34;这些是要复制的节点&#34;

contextref的组合使得如果instance('mainDoc2')不包含子元素,则原始元素将插入其中,如果它包含儿童元素,它们将在最后一个之后插入。