创建一个“同时静止子标记循环” etree Python

时间:2019-05-21 14:06:44

标签: python xml parsing elementtree

我想知道如何使用Python中的库Element Tree创建一个while循环:

while there is still child marker :
    cross each marker

因为我有一个由软件生成的XML文件,但是它可以是:

<root
    <child1
        <child2
    <child1
        <child2

可能是

<root
    <child1
        <child2
            <child3
    <child1
        <child2
            <child3

没有while循环,我必须为每种情况编写不同的代码

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Element.iter()方法将首先遍历元素后代的深度

import xml.etree.ElementTree as ET

s = '''
<root>
    <child1>
        <child2>
            <child3></child3>
        </child2>
    </child1>
    <child1>
        <child2></child2>
    </child1>
</root>'''


root = ET.fromstring(s)

用法:

>>> for c in root.iter():
...     print(c.tag)

root
child1
child2
child3
child1
child2

>>> e = root.find('child1')
>>> for c in e.iter():
...     print(c.tag)

child1
child2
child3

所有元素都具有相同名称的树。

s = '''
<root foo='0'>
    <child1 foo='1'>
        <child1 foo='2'>
            <child1 foo='3'></child1>
        </child1>
    </child1>
    <child1 foo='4'>
        <child1 foo='5'></child1>
    </child1>
</root>'''

root = ET.fromstring(s)

>>> for e in root.iter():
...     print(e.tag, e.attrib['foo'])

root 0
child1 1
child1 2
child1 3
child1 4
child1 5
>>>