diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lxml/tests/test_etree.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py index 42613dcb..ef5c54b7 100644 --- a/src/lxml/tests/test_etree.py +++ b/src/lxml/tests/test_etree.py @@ -5068,6 +5068,45 @@ class ETreeC14NTestCase(HelperTestCase): s = etree.tostring(tree, method='c14n', exclusive=True, inclusive_ns_prefixes=['x', 'y', 'z']) self.assertEqual(_bytes('<a xmlns:x="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), s) + + def test_python3_problem_bytesio_iterparse(self): + content = BytesIO('''<?xml version="1.0" encoding="utf-8"?> <some_ns_id:some_head_elem xmlns:some_ns_id="http://www.example.com" xmlns:xhtml="http://www.w3.org/1999/xhtml"><xhtml:div></xhtml:div></some_ns_id:some_head_elem>'''.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): + with open('test.xml', 'w+b') as f: + f.write('''<?xml version="1.0" encoding="utf-8"?> <some_ns_id:some_head_elem xmlns:some_ns_id="http://www.example.com" xmlns:xhtml="http://www.w3.org/1999/xhtml"><xhtml:div></xhtml:div></some_ns_id:some_head_elem>'''.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): + with open('test.xml', 'w+b') as f: + f.write('''<?xml version="1.0" encoding="utf-8"?> <some_ns_id:some_head_elem xmlns:some_ns_id="http://www.example.com" xmlns:xhtml="http://www.w3.org/1999/xhtml"><xhtml:div></xhtml:div></some_ns_id:some_head_elem>'''.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) class ETreeWriteTestCase(HelperTestCase): |
