2011-10-07 66 views
3
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对象。问题是我正在使用的真正的文件是巨大的,我无法将它全部放在内存中。所以我想使用:为什么ElementTree.iterparse()引发一个ParseError?

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 

我在做什么错?

回答

3

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

enter image description here

因此,对于那些谁碰巧犯同样的错误,解决的办法是要么打开一个新的文件,对象或使用file.seek(0)重置文件光标。

相关问题