gpt4 book ai didi

python - etree 对象的所有元素的简单循环?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:04 28 4
gpt4 key购买 nike

我有一个从 etree 元素返回列表的函数,但它不会查看嵌套元素。

<elem>
<variable id="getthis">
<!-- / -->
</variable>
<if>
<variable id="alsoGetThis">
<!-- Keep looping through all elements -->
</variable>
</if>
</elem>

(我正在使用 Valid XML )

所以目前<if>中的变量被忽略了,那么你怎么能遍历树的所有层级呢?我假设这是一项简单的任务,但也许我错了。 (我是 Python 的新手,并不总是像程序员一样思考)

获取变量的 Python 函数:

def collect_vars(self, elem):
elemVars = []
if elem.tag == 'variable':
elemVars.append(elem.attrib['id'])
elif e in elem == 'variable': # don't want to be doing these
elemVars.append(e.attrib['id'])
return elemVars

所以我最后想要的是列表 elemVars包含给定 <elem> 中的所有变量 ID

最佳答案

考虑学习 XPath并使用 LXML 的 xpath 成员。假设您的 XML 树名为 t,就好像您发布了

>>> s = """<elem>
<variable id="getthis">
<!-- / -->
</variable>
<if>
<variable id="alsoGetThis">
<!-- Keep looping through all elements -->
</variable>
</if>
</elem>
"""
>>> t = etree.fromstring(s)

然后你可以找到树中的所有元素

>>> t.xpath("//*")
[<Element elem at 0x2809b40>, <Element variable at 0x2809be0>, <Element if at 0x2809af0>, <Element variable at 0x2809c80>]

和所有 variable 元素

>>> t.xpath("//variable")
[<Element variable at 0x2809be0>, <Element variable at 0x2809c80>]

xpath 返回满足您指定的 XPath 条件的元素列表,表示为元素树:

>>> [x.attrib["id"] for x in t.xpath("//variable")]
['getthis', 'alsoGetThis']

关于python - etree 对象的所有元素的简单循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636203/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com