]> git.sesse.net Git - xml-template/commitdiff
Add clone support to the PHP code; clone.php works.
authorsgunderson@bigfoot.com <>
Fri, 11 Aug 2006 22:47:30 +0000 (00:47 +0200)
committersgunderson@bigfoot.com <>
Fri, 11 Aug 2006 22:47:30 +0000 (00:47 +0200)
clone.php [new file with mode: 0644]
xml-template.php

diff --git a/clone.php b/clone.php
new file mode 100644 (file)
index 0000000..df02dd5
--- /dev/null
+++ b/clone.php
@@ -0,0 +1,14 @@
+<?php
+require('xml-template.php');
+
+$doc = XML_Template_process_file('clone.xml', array(
+       'color' => 'blue',
+       '#things' => array(
+               array( 'li' => 'Raindrops on roses' ),
+               array( 'li' => 'Whiskers on kittens' ),
+               array( 'li' => 'Bright copper kettles' ),
+               array( 'li' => 'Warm, woolen mittens' ) 
+       )
+));
+print $doc->dump_mem();
+?>
index b394b443dc686b872cb008b778ccb12234ba4cb7..b823e8abd21a6ad45551235c540f7327dc633112 100644 (file)
@@ -58,8 +58,39 @@ function XML_Template_process($node, $obj, $clean = 1, $nsup = array())
                                XML_Template_process($child, $obj, $clean, $nsup);
                        }
                }
+       } else {                                                # repeat
+               $doc = $node->owner_document();
+               $frag = $doc->create_element("temporary-fragment");    # ugh
+
+               foreach ($node->child_nodes() as $child) {
+                       $frag->append_child($child);
+                       $node->remove_child($child);
+               }
+
+               foreach ($obj as $instance) {
+                       $newnode = $frag->clone_node(true);
+                       $node->append_child($newnode);
+                       XML_Template_process($newnode, $instance, $clean, $nsup);
+
+                       # FIXME: clean
+               }
+
+               # remove all the <fragment> tags
+
+               foreach ($node->child_nodes() as $child) {
+                       if ($child->name() != 'temporary-fragment') {
+                               continue;
+                       }
+                       foreach ($child->child_nodes() as $child2) {
+                               $node->append_child($child2);
+                       }
+                       $node->remove_child($child);
+               }       
+
+               return;
        }
 
+
        # FIXME: repeat
        # FIXME: clean
 }