diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2001-07-18 15:30:25 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2001-07-18 15:30:25 (GMT) |
commit | 984158d25bd76fa33d4245e98f53c876f428d5f4 (patch) | |
tree | e800adb67851daf0d200dfadb18a472eabdbd7f3 /Lib | |
parent | b311ad5bcba9c10ec0bf1cb9a19109d06a0b47cf (diff) | |
download | cpython-984158d25bd76fa33d4245e98f53c876f428d5f4.zip cpython-984158d25bd76fa33d4245e98f53c876f428d5f4.tar.gz cpython-984158d25bd76fa33d4245e98f53c876f428d5f4.tar.bz2 |
Patch #432117: Record namespaces in the DOM tree using the DOM xmlns prefix.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/xml/dom/pulldom.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/Lib/xml/dom/pulldom.py b/Lib/xml/dom/pulldom.py index d71f6df..c12c992 100644 --- a/Lib/xml/dom/pulldom.py +++ b/Lib/xml/dom/pulldom.py @@ -44,6 +44,9 @@ class PullDOM(xml.sax.ContentHandler): self._locator = locator def startPrefixMapping(self, prefix, uri): + if not hasattr(self, '_xmlns_attrs'): + self._xmlns_attrs = [] + self._xmlns_attrs.append((prefix or 'xmlns', uri)) self._ns_contexts.append(self._current_context.copy()) self._current_context[uri] = prefix or '' @@ -51,6 +54,13 @@ class PullDOM(xml.sax.ContentHandler): self._current_context = self._ns_contexts.pop() def startElementNS(self, name, tagName , attrs): + # Retrieve xml namespace declaration attributes. + xmlns_uri = 'http://www.w3.org/2000/xmlns/' + xmlns_attrs = getattr(self, '_xmlns_attrs', None) + if xmlns_attrs is not None: + for aname, value in xmlns_attrs: + attrs._attrs[(xmlns_uri, aname)] = value + self._xmlns_attrs = [] uri, localname = name if uri: # When using namespaces, the reader may or may not @@ -76,7 +86,14 @@ class PullDOM(xml.sax.ContentHandler): for aname,value in attrs.items(): a_uri, a_localname = aname - if a_uri: + if a_uri == xmlns_uri: + if a_localname == 'xmlns': + qname = a_localname + else: + qname = 'xmlns:' + a_localname + attr = self.document.createAttributeNS(a_uri, qname) + node.setAttributeNodeNS(attr) + elif a_uri: prefix = self._current_context[a_uri] if prefix: qname = prefix + ":" + a_localname |