Анализ атрибута в пространстве имен xml с деревом элементов

Используя следующий XML-файл, который является vmware OVF:

<File ovf:href="foo.vmdk"/>

Мне нужно изменить foo.vmdk на bar.vmdk

Я использовал элементное дерево для разбора файла, и он показал мне пространство имен для каждого элемента

>>> for elem in tree.iter():
....   print elem.tag, elem.attrib, elem.text
{http://schemas.dmtf.org/ovf/envelope/1}File {'{http://schemas.dmtf.org/ovf/envelope/1}href': 'foo.vmdk'}

Но если я пытаюсь разобрать тег File, он не находит его:

>>> for elem in tree.iterfind('File'):
...   print elem.tag, elem.attrib, elem.text
>>> 

Я понимаю, что " http://schemas.dmtf.org/ovf/envelope/1" - это пространство имен, но как мне разобраться в этом пространстве имен?

1 ответ

Следующее должно работать:

>>> for elem in tree.iterfind('{http://schemas.dmtf.org/ovf/envelope/1}File'):
...   print elem.tag, elem.attrib, elem.text
>>> 

(бесстыдный плагин: если вы хотите работать с OVF в Python, взгляните на COT...)

Другие вопросы по тегам