--- C:\Documents and Settings\v781296\Desktop\xmlmodel-0.1.1\main.py	Fri May 12 18:57:12 2006
+++ C:\Documents and Settings\v781296\Desktop\xmlmodel-0.1.1\main.py.new	Fri May 26 15:48:53 2006
@@ -1,7 +1,8 @@
 import inspect
 from copy import copy, deepcopy
 from util import DictProperty
-from meta import TrackableTrackerMeta
+from meta import TrackableTrackerMeta
+from elementtree.ElementTree import ElementTree,Element,SubElement
 
 __all__ = ( 'XMLNode', 'XMLModel', 'XMLNodeList' )
 
@@ -69,7 +70,27 @@
     
     def __str__( self ):
         return ''.join( self.toxml() )
-    
+    
+    def toElementTree( self ):
+      rootNode = Element(self._name)
+      _createTree(rootNode)
+      return ElementTree(rootNode)
+      
+    def _createTree( self,node ):
+      for attr, value in node.XMLAttrs.iteritems():
+        node.set(attr,value)
+      for v in self.values:
+        if issubclass( v, XMLNode ):
+          _createTree(SubElement(node,v))
+        elif issubclass( v, XMLValue ):
+          if not v.required and not v.value and not v.attrs:
+            return
+          assert self.name, "value has no name: %r" % self
+          subNode=SubElement(node,v.name)
+          for attr, value in v.attrs.iteritems():
+            subNode.set(attr,value)
+          if self.value is not None:
+            subNode.text=v.value
 
 class XMLNodeList( XMLNode, list ):
     """XMLNodeList( name ): This class is supposed to be a list of XMLNodes,

