Мы можем выполнять итерации по тегам, используя следующие итерации:
iterancestors (self, tag = None, * tags) Итерировать по предкам этого элемента (от родителя к родителю).
iterchildren (self, tag = None, reversed = False, * tags) Перебирать дочерние элементы этого элемента.
iterdescendants (self, tag = None, * tags) Перебирать потомков этого элемента в порядке документа.
iterfind (self, path, namespaces = None) Итерирует по всем соответствующим подэлементам по имени тега или пути.
itersiblings (self, tag = None, previousing = False, * tags) Итерировать по следующим или предшествующим братьям и сестрам этого элемента.
Разницу можно понять с помощью следующего кода
from lxml import etree
xml_str = '<main><child><c1><c11/><c12/></c1><c2/></child><child1/><child2/></main>'
parser = etree.XMLParser(ns_clean=True)
root = etree.XML(xml_str,parser)
Iterdescendats () вернет также все дочерние элементы и все теги в дочерних тегах
for i in root[0].iterdescendants():
print(i.tag)
output:
c1
c11
c12
c2
Iterchildren () вернет только дочерние теги
for i in root[0].iterchildren():
print(i.tag)
output:
c1
c2