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

时间:2013-03-15 10:33:46

标签: python xml lxml

我正试图把我的脑袋包裹在lxml(这是新的)以及如何使用它来做我想做的事情。我有一个结构良好且有效的XML文件

<root>
  <a>
    <b>Text</b>
    <c>More text</c>
  </a>
  <!-- some comment -->
  <a>
    <d id="10" />
  </a>
</root>
像这样的事情。现在我想先看看孩子们的广度,我能想到的最好的就是这样:

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

然后从那里拿走它。但是,这给了我所有元素,包括注释

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

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

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

1 个答案:

答案 0 :(得分:3)

这适合你的情况

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