Python 在lxml中,iterDescents()和iterchildren()之间有什么区别?

Python 在lxml中,iterDescents()和iterchildren()之间有什么区别?,python,lxml,Python,Lxml,在LXML python库中,如何迭代?lxml-python中的iterdescendants()和iterchildren()有什么区别?当您使用iterchildren()时,您会迭代一级child。当您使用iterDescents()时,您将迭代childs和childs中的childs 我们可以使用以下迭代对标记进行迭代: iTrancestors(self,tag=None,*tags) 迭代此元素的祖先(从父元素到父元素) iterchildren(self,tag=None,re

在LXML python库中,如何迭代?lxml-python中的iterdescendants()和iterchildren()有什么区别?

当您使用iterchildren()时,您会迭代一级child。当您使用iterDescents()时,您将迭代childs和childs中的childs

我们可以使用以下迭代对标记进行迭代:

iTrancestors(self,tag=None,*tags) 迭代此元素的祖先(从父元素到父元素)

iterchildren(self,tag=None,reversed=False,*tags) 迭代此元素的子元素

iTerDescents(自我,标记=无,*标记) 按文档顺序迭代此元素的子体

iterfind(self、path、名称空间=None) 按标记名或路径迭代所有匹配的子元素

itersiblings(self,tag=None,previous=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)
Iterchildren()将仅返回子标记

for i in root[0].iterchildren():
    print(i.tag)

output:
c1
c2

使用
iterchildren
可以迭代直接子级(对于下面的树,它意味着您只迭代7,5),而使用
iterchildren
可以迭代直接或间接子级(对于下面的树,您将迭代7,5,2,6…等等)

for i in root[0].iterchildren():
    print(i.tag)

output:
c1
c2