Skip to content

Commit f73b7cb

Browse files
pythongh-91810: Fix regression with writing an XML declaration with encoding='unicode'
Suppress writing an XML declaration in open files in ElementTree.write() with encoding='unicode' and xml_declaration=None.
1 parent 8a221a8 commit f73b7cb

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

Lib/test/test_xml_etree.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -3760,17 +3760,13 @@ def test_write_to_text_file(self):
37603760
tree.write(f, encoding='unicode')
37613761
self.assertFalse(f.closed)
37623762
with open(TESTFN, 'rb') as f:
3763-
self.assertEqual(f.read(), convlinesep(
3764-
b'''<?xml version='1.0' encoding='ascii'?>\n'''
3765-
b'''<site>&#248;</site>'''))
3763+
self.assertEqual(f.read(), b'''<site>&#248;</site>''')
37663764

37673765
with open(TESTFN, 'w', encoding='ISO-8859-1') as f:
37683766
tree.write(f, encoding='unicode')
37693767
self.assertFalse(f.closed)
37703768
with open(TESTFN, 'rb') as f:
3771-
self.assertEqual(f.read(), convlinesep(
3772-
b'''<?xml version='1.0' encoding='ISO-8859-1'?>\n'''
3773-
b'''<site>\xf8</site>'''))
3769+
self.assertEqual(f.read(), b'''<site>\xf8</site>''')
37743770

37753771
def test_write_to_binary_file(self):
37763772
self.addCleanup(os_helper.unlink, TESTFN)

Lib/xml/etree/ElementTree.py

+2
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,8 @@ def write(self, file_or_filename,
731731
with _get_writer(file_or_filename, encoding) as (write, declared_encoding):
732732
if method == "xml" and (xml_declaration or
733733
(xml_declaration is None and
734+
not (encoding.lower() == "unicode" and
735+
hasattr(file_or_filename, "write")) and
734736
declared_encoding.lower() not in ("utf-8", "us-ascii"))):
735737
write("<?xml version='1.0' encoding='%s'?>\n" % (
736738
declared_encoding,))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Suppress writing an XML declaration in open files in ``ElementTree.write()``
2+
with ``encoding='unicode'`` and ``xml_declaration=None``.

0 commit comments

Comments
 (0)