Element.findall()
ищет только элементы с тегом, которые являются прямыми потомками текущего элемента. То же самое происходит с find()
, но find()
возвращает первое совпадение. Итак, сначала вам нужно перейти к c-comm
, чтобы найти элемент p2df
, и, поскольку objects
является узлом root, вы сначала перейдете к c
, затем c-comm
, чтобы затем найти объекты. Смотрите ниже фрагмент.
import xml.etree.ElementTree as ET
mytree = ET.parse('sample.xml')
myroot = mytree.getroot()
cNode = myroot.find('c')
for x in cNode.findall('c-comm'):
p2df=x.find('p2df')
r2dd=x.find('r2dd')
print(p2df.text, r2dd.text)
Ваш пример xml не очень хорошо сформирован. Вам нужен закрывающий тег </objects>
в конце, чтобы синтаксический анализатор мог прочитать файл.