все 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'…', а кириллица превращается в Ж. Нужна строка — 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>Ж</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Сообщить о неточности