2011-10-07 22 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)重置文件光標。

相關問題