我需要将数据从一个模型重写到另一个模型。两种模型都有不同的名称空间,例如
<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
的数据的同一触发器中完成。
答案 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; context
和ref
的组合使得如果instance('mainDoc2')
不包含子元素,则原始元素将插入其中,如果它包含儿童元素,它们将在最后一个之后插入。