为什么在一个脚本中调用两次ElementTree.parse函数会出现异常?
Why invoking ElementTree.parse function twice in one script will get an exception?
我需要在一个脚本中处理两个 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函数会出现异常?
您应该为每棵树创建新的解析器。因为解析器在内部保存已解析的状态,所以它不能用于解析另一棵树。
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
我需要在一个脚本中处理两个 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函数会出现异常?
您应该为每棵树创建新的解析器。因为解析器在内部保存已解析的状态,所以它不能用于解析另一棵树。
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