为什么在一个脚本中两次调用ElementTree.parse函数会得到异常?

时间:2015-01-24 16:08:09

标签: python xml parsing elementtree

我需要在一个脚本中处理两个xml文件。 所以,我写了一些代码如下:

import xml.etree.cElementTree as ET

parser = ET.XMLParser(encoding='utf-8')
ET.parse('../wiki.xml', parser=parser)
ET.parse('../tutorial.xml', parser=parser)

然而,第二个电话parse有例外。

cElementTree.ParseError: parsing finished

但是,我确保两个xml文件都没有内部问题,因为当我更改顺序时,第二次调用总是出现异常,如果我保留了一个则没有问题。

那么,为什么在一个脚本中两次调用ElementTree.parse函数会得到异常?

2 个答案:

答案 0 :(得分:0)

您应该为每棵树创建新的解析器。因为解析器在内部保存解析状态,所以它不能用于解析另一棵树。

import xml.etree.cElementTree as ET

parser1 = ET.XMLParser(encoding='utf-8')
ET.parse('../wiki.xml', parser=parser1)
parser2 = ET.XMLParser(encoding='utf-8')
ET.parse('../tutorial.xml', parser=parser2)

答案 1 :(得分:0)

您还可以在构造下一棵树之前删除每棵树:

import xml.etree.ElementTree as ET
...
for xml_file in xml_files:
    tree = ET.parse(xml_file)
    root = tree.getroot()
    analyze_one_file(root)
    del root
    del tree