ElementTree在python中解析

时间:2013-03-28 09:36:11

标签: python parsing elementtree

我有

形式的xml
<root>
  <tag1>   </tag1>
  <tag2>   </tag2>
  <tag3>   </tag3>

  <tag1>   </tag1>
  <tag2>   </tag2>
  <tag3>   </tag3>
</root>

我需要按顺序解析xml

tag1 -> tag2 -> tag3 -> tag1 -> tag2 -> tag3 

目前我正在使用

root = tree.getroot()
for data in root.findall('tag1')
    do_operations(data)
for data in root.findall('tag2')
    do_operations(data)

但是这种方法给了我很明显

tag1 -> tag1 -> tag2 -> tag2 -> tag3 -> tag3

这不是我想要的。

你能否提出一种最佳的方法,我可以用所需的方式来分析XML。 tag1,tag2,tag3以与上面给出的顺序重复很多次。

2 个答案:

答案 0 :(得分:2)

IIUC,你不能简单地遍历root本身吗?

>>> for data in root:
...     print data
...     
<Element tag1 at 0x102dea7d0>
<Element tag2 at 0x102dea8c0>
<Element tag3 at 0x102dd6d20>
<Element tag1 at 0x102dea7d0>
<Element tag2 at 0x102dea8c0>
<Element tag3 at 0x102dd6d20>

答案 1 :(得分:1)

您可以迭代孩子而不是使用find:

for child in root:
    do operations...

如果对不同的标签执行不同的操作,可以使用child.tag来确定要执行的操作:

for child in root:
    if child.tag == 'tag1':
       do operations
    elif child.tag == 'tag2':
       do other operations
    ...

或者你可以将操作放在一个字典中,并避免使用if-elif-else咒语。