Ответ 1
Вы можете определить генератор для рекурсивного поиска по дереву элементов, чтобы найти теги, которые заканчиваются соответствующим именем тега. Например, что-то вроде этого:
def get_element_by_tag(element, tag):
if element.tag.endswith(tag):
yield element
for child in element:
for g in get_element_by_tag(child, tag):
yield g
Это просто проверяет теги, заканчивающиеся на tag
, т.е. игнорируя любое ведущее пространство имен. Затем вы можете перебирать любой тег, который вы хотите, следующим образом:
for item in get_element_by_tag(elemettree, 'technicalContact'):
...
Этот генератор в действии:
>>> xml_str = """<root xmlns="http://www.example.com">
... <technicalContact>Test1</technicalContact>
... <technicalContact>Test2</technicalContact>
... </root>
... """
xml_etree = etree.fromstring(xml_str)
>>> for item in get_element_by_tag(xml_etree, 'technicalContact')
... print item.tag, item.text
...
{http://www.example.com}technicalContact Test1
{http://www.example.com}technicalContact Test2