Deep Copy with Insert Origin

XForms · Wikibooks

0%

Contents

    Text

    Size
    100%
    Theme
    Typeface
    Line length
    Spacing

    From Wikibooks, under CC BY-SA 4.0, as the source states it. This page at Wikibooks.

    Deep Copy with Insert Origin

    Motivation

    You want to add a new instance or element from a template. You want to do a deep copy of complex XML from one instance to another instance within a model.

    Method

    We will use the XForms 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.

    Load XForms Application

    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>
    

    Discussion

    Next Page: Incremental Model Loading | Previous Page: Dynamic Selection Lists
    Home: XForms