Краткий и быстрый вариант исправления:
- Заменить найти на findall .
- As exchange- document не является прямым потомком root, добавьте XPath к . // , чтобы посмотреть на любую глубину.
Поэтому измените свой код на:
for x in root.findall('.//{http://www.epo.org/exchange}exchange-document'):
print(x.tag)
Но размещение полных пространств имен в каждом XPath не является хорошей идеей. Вместо этого я рекомендую:
- Определить словарь со всеми ярлыками и пространствами имен, используемыми в ваших XPath.
- В каждом XPath укажите пространство имен с соответствующим ярлыком (+ двоеточие в качестве разделителя) ), но на этот раз без окружающих скобок.
- Передайте этот словарь как второй параметр в findall .
Итак, второй (ИМХО более читабельный) Вариант:
ns = {'exch': 'http://www.epo.org/exchange'}
for x in root.findall('.//exch:exchange-document', ns):
print(x.tag)