summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Kralidis <tomkralidis@gmail.com>2015-05-18 08:04:54 -0400
committerTom Kralidis <tomkralidis@gmail.com>2015-05-18 08:04:54 -0400
commitc00ade0b4aab52fb6ebe1a0df4d19f18ecf706ff (patch)
treeb8204080015e6d3b51bcee667d28d9904751a08f /src
parent66a02e83a3c843a6f624a21ee036835e5ccb1113 (diff)
downloadpython-lxml-c00ade0b4aab52fb6ebe1a0df4d19f18ecf706ff.tar.gz
update implemenation, tests
Diffstat (limited to 'src')
-rw-r--r--src/lxml/apihelpers.pxi3
-rw-r--r--src/lxml/tests/test_etree.py16
2 files changed, 8 insertions, 11 deletions
diff --git a/src/lxml/apihelpers.pxi b/src/lxml/apihelpers.pxi
index 11f4c697..d2d2023f 100644
--- a/src/lxml/apihelpers.pxi
+++ b/src/lxml/apihelpers.pxi
@@ -389,7 +389,8 @@ cdef int _removeUnusedNamespaceDeclarations(xmlNode* c_element, keep_nsmap) exce
while c_node and c_ns_list_len:
if c_node.ns:
for i in range(c_ns_list_len):
- if c_node.ns is c_ns_list[i].ns:
+ if (c_node.ns is c_ns_list[i].ns or
+ (keep_nsmap is not None and c_ns_list[i].ns.href in keep_nsmap.values())):
c_ns_list_len -= 1
c_ns_list[i] = c_ns_list[c_ns_list_len]
#c_ns_list[c_ns_list_len] = _ns_node_ref(NULL, NULL)
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py
index fae06192..d200d21e 100644
--- a/src/lxml/tests/test_etree.py
+++ b/src/lxml/tests/test_etree.py
@@ -2687,20 +2687,16 @@ class ETreeOnlyTestCase(HelperTestCase):
self.etree.tostring(root))
def test_namespace_cleanup_deep_keep_to_top(self):
- xml = ('<root xmlns:foo="FOO">' +
- ''.join('<a xmlns:n{n}="NS{n}">'.format(n=i) for i in range(100)) +
- '<n64:x xmlns:a="A" a:attr="X"/>' +
- '</a>'*100 +
- '<foo>foo:bar</foo>' +
+ xml = ('<root xmlns:n64="NS64" xmlns:foo="FOO">' +
+ '<a><n64:x xmlns:a="A" a:attr="X"/>' +
+ '</a><foo>foo:bar</foo>' +
'</root>').encode('utf8')
root = self.etree.fromstring(xml)
self.assertEqual(xml, self.etree.tostring(root))
- self.etree.cleanup_namespaces(root,
- top_nsmap={'n64': 'NS64'},
- keep_nsmap={'foo': 'FOO'})
+ self.etree.cleanup_namespaces(root, keep_nsmap={'foo': 'FOO'})
self.assertEqual(
- b'<root xmlns:n64="NS64" xmlns:foo="FOO">' + b'<a>'*100 +
- b'<n64:x xmlns:a="A" a:attr="X"/>' + b'</a>'*100 +
+ b'<root xmlns:n64="NS64" xmlns:foo="FOO">' +
+ b'<a><n64:x xmlns:a="A" a:attr="X"/></a>' +
b'<foo>foo:bar</foo>' + b'</root>',
self.etree.tostring(root))