2015-01-24 3 views
1

Мне нужно обработать два xml-файла в одном скрипте. Итак, я написал некоторые коды, как показано ниже:Почему вызов функции ElementTree.parse дважды в одном скрипте получит исключение?

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-файлы не имеют никаких внутренних проблем, потому что, когда я изменил порядок второй Invoke всегда есть исключение, и если я зарезервировал одно не было никаких проблем.

Итак, почему вызов функции ElementTree.parse дважды в одном скрипте получит исключение?

ответ

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) 
+0

Это решение является правильным, спасибо! Однако, может ли существующий один метод очистить состояние парсера? – xohozu

+0

Как из [документации] (https://docs.python.org/3.4/library/xml.etree.elementtree.html#xmlparser-objects) Я не вижу этого. Вы можете поэкспериментировать с методом 'close()', но я не уверен, что это сделает трюк. –

Смежные вопросы