Python Glossary English

все Python 3xml.etree.ElementTreeфункция

xml.etree.ElementTree.tostring()

сериализация

Сериализует элемент со всем поддеревом в XML. По умолчанию возвращает bytes в US-ASCII; str даёт encoding='unicode'.

Синтаксис

ET.tostring(element, encoding='us-ascii', method='xml', *, xml_declaration=None, default_namespace=None, short_empty_elements=True)

Самая частая ловушка: результат — bytes, и print() показывает b'…', а кириллица превращается в &#1046;. Нужна строка — encoding='unicode' (именно так, не 'utf-8': 'utf-8' тоже вернёт bytes). Декларация <?xml…?> добавляется сама только для кодировок кроме us-ascii, utf-8 и unicode; управляет ею xml_declaration (с 3.8). С 3.8 порядок атрибутов сохраняется таким, каким его задали, — раньше они сортировались. Для красивого вывода сначала вызовите indent().

Примеры

import xml.etree.ElementTree as ET
e = ET.fromstring('<a>Ж</a>')
print(ET.tostring(e))  # → b'<a>&#1046;</a>'
print(ET.tostring(e, encoding='unicode'))  # → <a>Ж</a>
print(type(ET.tostring(e, encoding='utf-8')).__name__)  # → bytes
import xml.etree.ElementTree as ET
e = ET.Element('x', z='1', a='2')
print(ET.tostring(e, encoding='unicode'))  # → <x z="1" a="2" /> — порядок как задан
print(ET.tostring(e, encoding='unicode', short_empty_elements=False))
# → <x z="1" a="2"></x>
print(ET.tostring(ET.fromstring('<p>a<b>b</b>c</p>'), method='text', encoding='unicode'))  # → abc

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности