为什么ElementTree.iterparse()会引发ParseError?

时间:2011-10-07 15:48:25

标签: python xml parsing xml-parsing elementtree

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 个答案:

答案 0 :(得分:3)

我的代码非常好,除了我在ElementTree.iterparse()已经阅读的文件对象上调用ElementTree.parse()。 D'哦!

enter image description here

因此,对于碰巧犯同样错误的人,解决方法是打开新文件对象或使用file.seek(0)重置文件光标。