from xml.dom import pulldom from xml.dom.pulldom import * class DOMEventStream(pulldom.DOMEventStream): def reset(self): self.pulldom = PullDOM() self.pulldom._ns_contexts = [{'http://www.w3.org/XML/1998/namespace':'xml'}] self.pulldom._current_context = self.pulldom._ns_contexts[-1] # This content handler relies on namespace support self.parser.setFeature(xml.sax.handler.feature_namespaces, 1) self.parser.setContentHandler(self.pulldom) def parseString(string, parser=None): try: from cStringIO import StringIO except ImportError: from StringIO import StringIO bufsize = len(string) buf = StringIO(string) if not parser: parser = xml.sax.make_parser() parser._ns_stack.append({'http://www.w3.org/XML/1998/namespace':'xml'}) events = DOMEventStream(buf, parser, bufsize) toktype, rootNode = events.getEvent() events.expandNode(rootNode) events.clear() return rootNode