在LXML python库中,如何迭代?lxml python中的iterdescendants()和iterchildren()有什么不同?
发布于 2020-01-08 14:40:55
使用iterchildren
迭代直接子对象(对于下面的树,意味着您只迭代7,5),而使用iterdescendants
迭代直接或间接子对象(对于下面的树,您将迭代7,5,2,6...etc)。
发布于 2020-01-08 14:22:43
当您使用iterchildren()时,您将迭代第一级childs。当您使用iterdescendants()时,您将迭代childs和childs of childs。
发布于 2020-01-08 14:28:33
我们可以使用以下迭代遍历标记:
迭代祖先(self、tag=None、*标记)遍历此元素的祖先(从父元素到父元素)。
iterchildren(self,tag=None,reversed=False,*标签)遍历这个元素的子元素。
迭代子元素(self、tag=None、*标记)按文档顺序迭代此元素的子元素。
iterfind(self,path,namespaces=None)通过标记名或路径遍历所有匹配的子元素。
itersiblings(self、tag=None、preceding=False、*标记)遍历此元素的后面或前面的同级元素。
这一区别可以通过以下代码来理解
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
https://stackoverflow.com/questions/59640314
复制相似问题