XForms/Deep Copy with Insert Origin
From Wikibooks, the open-content textbooks collection
< XForms
Contents |
[edit] Motivation
You want to do a deep copy of complex XML from one instance to another instance within a model.
[edit] Method
We will use the XFroms xf:insert element with the origin attribute set to the source instance. We will use the nodeset attribute to indicate where the data should be copied to.
[edit] Link to XForms Application
[edit] Source Code
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xf="http://www.w3.org/2002/xforms"> <head> <title>Using Origin to do a Deep Copy between instances</title> <style type="text/css"> @namespace xf url("http://www.w3.org/2002/xforms"); body {font-family:Helvetica, sans-serif} #source-repeat {border: blue solid 1px;} #destination-repeat {border: green solid 1px;} </style> <xf:model> <xf:instance xmlns="" id="source"> <data> <a>A1</a> <a>A2</a> <a>A3</a> </data> </xf:instance> <xf:instance xmlns="" id="destination"> <data/> </xf:instance> </xf:model> </head> <body> <h1>Example of deep copy using XForms insert origin</h1> <h3>Source:</h3> <xf:repeat id="source-repeat" nodeset="instance('source')/a"> <xf:output ref="."/> </xf:repeat> <h3>Destination:</h3> <xf:repeat id="destination-repeat" nodeset="instance('destination')/a"> <xf:output ref="."/> </xf:repeat> <xf:trigger> <xf:label>Copy data from source to destination</xf:label> <xf:action ev:event="DOMActivate"> <xf:insert origin="instance('source')" nodeset="instance('destination')"/> </xf:action> </xf:trigger> </body> </html>