Python 为什么在一个脚本中调用ElementTree.parse函数两次会出现异常?
我需要在一个脚本中处理两个xml文件。 因此,我编写了如下代码:Python 为什么在一个脚本中调用ElementTree.parse函数两次会出现异常?,python,xml,parsing,elementtree,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 fin
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函数两次会出现异常呢?您应该为每个树创建新的解析器。因为解析器在内部保存已解析的状态,所以它不能用于解析另一棵树
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)
您还可以在构建下一棵树之前删除每棵树:
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
这个解决方案是正确的,谢谢!然而,现有的一种方法是否可以清除解析器的状态?从现在起,我看不到。您可以尝试使用
close()
方法,但我不确定它是否能奏效。