Этот фрагмент из вашего вопроса,
for a in root.findall('{urn:com:xml:data}image'):
print a.attrib
ничего не выводит, поскольку он ищет только прямые {urn:com:xml:data}image
дочерние элементы корня дерева.
Это слегка измененное код
for a in root.findall('.//{urn:com:xml:data}image'):
print a.attrib
будет печатать {'imageId': '1'}
, поскольку он использует .//
, который выбирает соответствующие подэлементы на всех уровнях.
Ссылка: https: // docs. python.org/2/library/xml.etree.elementtree.html#supported-xpath-syntax.
Немного раздражает, что ElementTree не просто сохраняет исходное пространство имен префиксы по умолчанию, но имейте в виду, что в любом случае это не префиксы. Функция register_namespace()
может использоваться для установки желаемого префикса при сериализации XML. Функция не оказывает никакого влияния на разбор или поиск.