mirror of
https://github.com/python/cpython
synced 2024-07-21 10:15:53 +00:00
Do not use the default namespace for attributes.
Fixes http://bugs.debian.org/229885 Will backport to 2.3.
This commit is contained in:
parent
d7911a3317
commit
9f1340b9f2
|
@ -13,6 +13,8 @@
|
|||
<greeting>Hello, world!</greeting>
|
||||
"""
|
||||
|
||||
nsdoc = "<foo xmlns='URI' attr='val'/>"
|
||||
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore", ".* xmllib .* obsolete.*",
|
||||
DeprecationWarning, r'xmllib$')
|
||||
|
@ -29,6 +31,18 @@ def test_simple(self):
|
|||
parser.feed(c)
|
||||
parser.close()
|
||||
|
||||
def test_default_namespace(self):
|
||||
class H(xmllib.XMLParser):
|
||||
def unknown_starttag(self, name, attr):
|
||||
self.name, self.attr = name, attr
|
||||
h=H()
|
||||
h.feed(nsdoc)
|
||||
h.close()
|
||||
# The default namespace applies to elements...
|
||||
self.assertEquals(h.name, "URI foo")
|
||||
# but not to attributes
|
||||
self.assertEquals(h.attr, {'attr':'val'})
|
||||
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(XMLParserTestCase)
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
import string
|
||||
|
||||
import warnings
|
||||
warnings.warn("The xmllib module is obsolete. Use xml.sax instead.",
|
||||
DeprecationWarning)
|
||||
warnings.warn("The xmllib module is obsolete. Use xml.sax instead.", DeprecationWarning)
|
||||
del warnings
|
||||
|
||||
version = '0.3'
|
||||
|
@ -641,20 +640,17 @@ def parse_starttag(self, i):
|
|||
aprefix, key = res.group('prefix', 'local')
|
||||
if self.__map_case:
|
||||
key = key.lower()
|
||||
if aprefix is None:
|
||||
aprefix = ''
|
||||
ans = None
|
||||
for t, d, nst in self.stack:
|
||||
if aprefix in d:
|
||||
ans = d[aprefix]
|
||||
if ans is None and aprefix != '':
|
||||
ans = self.__namespaces.get(aprefix)
|
||||
if ans is not None:
|
||||
key = ans + ' ' + key
|
||||
elif aprefix != '':
|
||||
key = aprefix + ':' + key
|
||||
elif ns is not None:
|
||||
key = ns + ' ' + key
|
||||
if aprefix is not None:
|
||||
ans = None
|
||||
for t, d, nst in self.stack:
|
||||
if aprefix in d:
|
||||
ans = d[aprefix]
|
||||
if ans is None:
|
||||
ans = self.__namespaces.get(aprefix)
|
||||
if ans is not None:
|
||||
key = ans + ' ' + key
|
||||
else:
|
||||
key = aprefix + ':' + key
|
||||
nattrdict[key] = val
|
||||
attrnamemap[key] = okey
|
||||
attrdict = nattrdict
|
||||
|
|
Loading…
Reference in a new issue