From ead51b4fecbe942a144ff0f5a5ed88709ad2a5c5 Mon Sep 17 00:00:00 2001 From: Goffi Date: Sun, 6 Feb 2011 23:40:29 +0100 Subject: [PATCH] xml_tools: added ElementParser for raw xml -> domish.Element conversion --- src/tools/xml_tools.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/tools/xml_tools.py b/src/tools/xml_tools.py index 9f3ef1bf..69b1d66f 100644 --- a/src/tools/xml_tools.py +++ b/src/tools/xml_tools.py @@ -23,6 +23,7 @@ from logging import debug, info, error 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 @@ class XMLUI: 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()