首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >lxml中的iterdescendants()和iterchildren()有什么不同?

lxml中的iterdescendants()和iterchildren()有什么不同?
EN

Stack Overflow用户
提问于 2020-01-08 14:15:07
回答 3查看 1K关注 0票数 1

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

EN

回答 3

Stack Overflow用户

发布于 2020-01-08 14:40:55

使用iterchildren迭代直接子对象(对于下面的树,意味着您只迭代7,5),而使用iterdescendants迭代直接或间接子对象(对于下面的树,您将迭代7,5,2,6...etc)。

票数 2
EN

Stack Overflow用户

发布于 2020-01-08 14:22:43

当您使用iterchildren()时,您将迭代第一级childs。当您使用iterdescendants()时,您将迭代childs和childs of childs。

票数 0
EN

Stack Overflow用户

发布于 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、*标记)遍历此元素的后面或前面的同级元素。

这一区别可以通过以下代码来理解

代码语言:javascript
运行
复制
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()将返回子标记中的所有子标记和标记

代码语言:javascript
运行
复制
for i in root[0].iterdescendants():
    print(i.tag) 

output:
c1
c11
c12
c2

Iterchildren()将只返回子标记

代码语言:javascript
运行
复制
for i in root[0].iterchildren():
    print(i.tag)

output:
c1
c2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59640314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档