changeset 289:0e54b1b0a8c8

xml_tools: added ElementParser for raw xml -> domish.Element conversion
author Goffi <goffi@goffi.org>
date Sun, 06 Feb 2011 23:40:29 +0100
parents 76247af9917c
children 59a82af700e2
files src/tools/xml_tools.py
diffstat 1 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/tools/xml_tools.py	Sun Feb 06 23:32:13 2011 +0100
+++ b/src/tools/xml_tools.py	Sun Feb 06 23:40:29 2011 +0100
@@ -23,6 +23,7 @@
 from xml.dom import minidom
 from wokkel import data_form
 import pdb
+from twisted.words.xish import domish
 
 """This library help manage XML used in SàT (parameters, registration, etc) """
 
@@ -300,3 +301,28 @@
     def toXml(self):
         """return the XML representation of the panel""" 
         return self.doc.toxml()
+
+
+
+class ElementParser(object):
+    """callable class to parse XML string into Element
+    Found at http://stackoverflow.com/questions/2093400/how-to-create-twisted-words-xish-domish-element-entirely-from-raw-xml/2095942#2095942
+    (c) Karl Anderson"""
+
+    def __call__(self, s):
+        self.result = None
+        def onStart(el):
+            self.result = el
+        def onEnd():
+            pass
+        def onElement(el):
+            self.result.addChild(el)
+
+        parser = domish.elementStream()
+        parser.DocumentStartEvent = onStart
+        parser.ElementEvent = onElement
+        parser.DocumentEndEvent = onEnd
+        tmp = domish.Element(("", "s"))
+        tmp.addRawXml(s.replace('\n','').replace('\t',''))
+        parser.parse(tmp.toXml())
+        return self.result.firstChildElement()