import unittest class LXML_C14N2_RegressionTest(unittest.TestCase): def test_python3_problem_bytesio_iterparse(self): from lxml import etree from io import BytesIO content = BytesIO(''' '''.encode('utf-8')) def handle_div_end(event, element): if event == 'end' and element.tag.lower().startswith("{http://www.w3.org/1999/xhtml}div"): for ns_id, ns_uri in element.nsmap.items(): print(type(ns_id), type(ns_uri), ns_id, '=', ns_uri) etree.tostring(element, method="c14n2") for event, element in etree.iterparse( source=content, events=('start', 'end') ): handle_div_end(event, element) def test_python3_problem_bytesio_iterparse_global_ns_registration(self): from lxml import etree from io import BytesIO etree.register_namespace('xhtml', 'http://www.w3.org/1999/xhtml') content = BytesIO(''' '''.encode('utf-8')) def handle_div_end(event, element): if event == 'end' and element.tag.lower().startswith("{http://www.w3.org/1999/xhtml}div"): for ns_id, ns_uri in element.nsmap.items(): print(type(ns_id), type(ns_uri), ns_id, '=', ns_uri) etree.tostring(element, method="c14n2") for event, element in etree.iterparse( source=content, events=('start', 'end') ): handle_div_end(event, element) def test_python3_problem_filebased_iterparse(self): from lxml import etree with open('test.xml', 'w+b') as f: f.write(''' '''.encode('utf-8')) def handle_div_end(event, element): if event == 'end' and element.tag.lower() == "{http://www.w3.org/1999/xhtml}div": for ns_id, ns_uri in element.nsmap.items(): print(type(ns_id), type(ns_uri), ns_id, '=', ns_uri) etree.tostring(element, method="c14n2") for event, element in etree.iterparse( source='test.xml', events=('start', 'end') ): handle_div_end(event, element) def test_python3_problem_filebased_parse(self): from lxml import etree with open('test.xml', 'w+b') as f: f.write(''' '''.encode('utf-8')) def serialize_div_element(element): for ns_id, ns_uri in element.nsmap.items(): print(type(ns_id), type(ns_uri), ns_id, '=', ns_uri) etree.tostring(element, method="c14n2") tree = etree.parse(source='test.xml') root = tree.getroot() div = root.xpath('//xhtml:div', namespaces={'xhtml':'http://www.w3.org/1999/xhtml'})[0] serialize_div_element(div)