Почему ElementTree.iterparse () вызывает ParseError? - PullRequest
3 голосов
/ 07 октября 2011
import xml.etree.ElementTree as ET
xmldata = file('my_xml_file.xml')

tree = ET.parse(xmldata)
root = tree.getroot()
root_iter = root.iter()

Теперь я могу позвонить root_iter.next() и получить мои Element объекты. Проблема в том, что реальный файл, с которым я работаю, огромен, и я не могу вместить все это в память. Поэтому я пытаюсь использовать:

parse_iter = ET.iterparse(xmldata)

Если я позвоню parse_iter.next(), это вызовет следующее

Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    parse_iter.next()
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1260, in next
    self._root = self._parser.close()
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1636, in close
    self._raiseerror(v)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1488, in _raiseerror
    raise err
ParseError: no element found: line 1, column 0

Что я делаю не так?

1 Ответ

3 голосов
/ 07 октября 2011

Код, который у меня был, был в порядке, за исключением того, что я вызывал ElementTree.iterparse() для файлового объекта, который я уже прочитал с ElementTree.parse().Д'Ох!

enter image description here

Так что для тех, кто случайно совершил ту же ошибку, решение состоит в том, чтобы либо открыть новый файловый объект, либо использовать file.seek(0) для сброса курсора файла.

...