python - 如何使用 Python 在 lxml etree 上进行最佳迭代(广度优先)

标签 python xml lxml

我正在尝试了解 lxml (这是新的)以及如何使用它来做我想做的事情。我有一个格式正确且有效的 XML 文件

<root>
  <a>
    <b>Text</b>
    <c>More text</c>
  </a>
  <!-- some comment -->
  <a>
    <d id="10" />
  </a>
</root>

类似这样的事情。现在我想广度优先地访问 children ,我能想到的最好的办法是这样的:

for e in xml.getroot()[0].itersiblings() :
    print(e.tag, e.attrib)

然后从那里拿走它。然而,这给了我所有元素,包括评论

a {}
<built-in function Comment> {}
a {}

如何跳过评论?有没有更好的方法来迭代节点的直接子节点?

一般来说,与使用 iterparse() 等事件驱动的拉式解析相比,解析 XML 树的建议是什么?

最佳答案

这适用于您的情况

for child in doc.getroot().iterchildren("*"):
    print(child.tag, child.attrib)

关于python - 如何使用 Python 在 lxml etree 上进行最佳迭代(广度优先),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430090/

相关文章:

php - RSS 2.0 描述标签中支持哪些元素?

python - 使用 lxml 解析文本并将其分解为句子列表,使用一些标签来添加结构

python - 关闭 lxml 中没有文本的标签

python - 为什么我的代码不起作用?在比赛前找到一个词

python - csv.错误 : did you open the file in text mode?

java - Android fragment 未显示在应用程序中

Python 高效地从 XML 中提取嵌套元素

python - 热图中转置混淆矩阵的原因

类主体中类的 Python 名称

java - JAXB/XSD : Number instead of Element name