[Lxml-checkins] r41955 - in lxml/trunk: . src/lxml

scoder at codespeak.net scoder at codespeak.net
Sat Apr 7 22:17:30 CEST 2007


Author: scoder
Date: Sat Apr  7 22:17:29 2007
New Revision: 41955

Modified:
   lxml/trunk/CHANGES.txt
   lxml/trunk/src/lxml/sax.py
Log:
support for custom Element class instantiation in lxml.sax

Modified: lxml/trunk/CHANGES.txt
==============================================================================
--- lxml/trunk/CHANGES.txt	(original)
+++ lxml/trunk/CHANGES.txt	Sat Apr  7 22:17:29 2007
@@ -8,6 +8,8 @@
 Features added
 --------------
 
+* Support for custom Element class instantiation in lxml.sax
+
 * '.' represents empty ObjectPath (identity)
 
 * EXSLT RegExp support in standard XPath (not only XSLT)

Modified: lxml/trunk/src/lxml/sax.py
==============================================================================
--- lxml/trunk/src/lxml/sax.py	(original)
+++ lxml/trunk/src/lxml/sax.py	Sat Apr  7 22:17:29 2007
@@ -13,12 +13,15 @@
 class ElementTreeContentHandler(object, ContentHandler):
     """Build an lxml ElementTree from SAX events.
     """
-    def __init__(self):
+    def __init__(self, makeelement=None):
         self._root = None
         self._element_stack = []
         self._default_ns = None
         self._ns_mapping = { None : [None] }
         self._new_mappings = {}
+        if makeelement is None:
+            makeelement = Element
+        self._makeelement = makeelement
 
     def _get_etree(self):
         "Contains the generated ElementTree after parsing is finished."
@@ -77,7 +80,8 @@
 
         element_stack = self._element_stack
         if self._root is None:
-            element = self._root = Element(el_name, attrs, self._new_mappings)
+            element = self._root = \
+                      self._makeelement(el_name, attrs, self._new_mappings)
         else:
             element = SubElement(element_stack[-1], el_name,
                                  attrs, self._new_mappings)


More information about the lxml-checkins mailing list