Python Glossary English

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

xml.etree.ElementTree.register_namespace()

пространства имён

Задаёт префикс, с которым пространство имён будет записано при сериализации вместо автоматических ns0, ns1.

Синтаксис

ET.register_namespace(prefix, uri)

После разбора теги хранятся как '{uri}tag', а исходные префиксы забываются, поэтому обратная запись даёт ns0:… — отсюда «испорченные» файлы. register_namespace() лечит вывод, но реестр глобальный на весь процесс: регистрация в одной библиотеке меняет вывод в другой. Поиск это не затрагивает: find('item') в документе с xmlns по умолчанию вернёт None — нужен '{uri}item', словарь namespaces или '{*}item' (3.8+).

Примеры

import xml.etree.ElementTree as ET
root = ET.fromstring('<root xmlns="http://ex.com/ns"><item>1</item></root>')
print(root.tag)  # → {http://ex.com/ns}root
print(root.find('item'))  # → None
print(root.find('ns:item', {'ns': 'http://ex.com/ns'}).text)  # → 1
print(root.find('{*}item').text)  # → 1
import xml.etree.ElementTree as ET
root = ET.fromstring('<root xmlns="http://ex.com/ns"><item/></root>')
print(ET.tostring(root, encoding='unicode'))
# → <ns0:root xmlns:ns0="http://ex.com/ns"><ns0:item /></ns0:root>
ET.register_namespace('', 'http://ex.com/ns')
print(ET.tostring(root, encoding='unicode'))
# → <root xmlns="http://ex.com/ns"><item /></root>

См. также

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