diff options
Diffstat (limited to 'Lib/xml/dom/pulldom.py')
-rw-r--r-- | Lib/xml/dom/pulldom.py | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/Lib/xml/dom/pulldom.py b/Lib/xml/dom/pulldom.py index c400742..b573ba0 100644 --- a/Lib/xml/dom/pulldom.py +++ b/Lib/xml/dom/pulldom.py @@ -61,11 +61,17 @@ class PullDOM(xml.sax.ContentHandler): tagName = prefix + ":" + localname else: tagName = localname - node = self.document.createElementNS(uri, tagName) + if self.document: + node = self.document.createElementNS(uri, tagName) + else: + node = self.buildDocument(uri, tagName) else: # When the tagname is not prefixed, it just appears as # localname - node = self.document.createElement(localname) + if self.document: + node = self.document.createElement(localname) + else: + node = self.buildDocument(None, localname) for aname,value in attrs.items(): a_uri, a_localname = aname @@ -90,7 +96,10 @@ class PullDOM(xml.sax.ContentHandler): self.lastEvent = self.lastEvent[1] def startElement(self, name, attrs): - node = self.document.createElement(name) + if self.document: + node = self.document.createElement(name) + else: + node = self.buildDocument(None, name) for aname,value in attrs.items(): attr = self.document.createAttribute(aname) @@ -127,23 +136,28 @@ class PullDOM(xml.sax.ContentHandler): self.lastEvent = self.lastEvent[1] def startDocument(self): - publicId = systemId = None - if self._locator: - publicId = self._locator.getPublicId() - systemId = self._locator.getSystemId() if self.documentFactory is None: import xml.dom.minidom self.documentFactory = xml.dom.minidom.Document.implementation - node = self.documentFactory.createDocument(None, publicId, systemId) + + def buildDocument(self, uri, tagname): + # Can't do that in startDocument, since we need the tagname + # XXX: obtain DocumentType + node = self.documentFactory.createDocument(uri, tagname, None) self.document = node self.lastEvent[1] = [(START_DOCUMENT, node), None] self.lastEvent = self.lastEvent[1] self.push(node) + return node.firstChild def endDocument(self): self.lastEvent[1] = [(END_DOCUMENT, self.document), None] self.pop() + def clear(self): + "clear(): Explicitly release parsing structures" + self.document = None + class ErrorHandler: def warning(self, exception): print exception @@ -199,6 +213,13 @@ class DOMEventStream: self.pulldom.firstEvent[1] = self.pulldom.firstEvent[1][1] return rc + def clear(self): + "clear(): Explicitly release parsing objects" + self.pulldom.clear() + del self.pulldom + self.parser = None + self.stream = None + class SAX2DOM(PullDOM): def startElementNS(self, name, tagName , attrs): |