Index: Lib/xml/etree/ElementTree.py =================================================================== --- Lib/xml/etree/ElementTree.py (revision 66861) +++ Lib/xml/etree/ElementTree.py (working copy) @@ -187,6 +187,11 @@ tail = None # text after end tag, if any + ## + # (Attribute) True if this element's values are all initialized. + + initialized = False + def __init__(self, tag, attrib): self.tag = tag self.attrib = attrib @@ -923,24 +928,25 @@ try: item = self._events[self._index] except IndexError: - if self._parser is None: - self.root = self._root - try: - raise StopIteration - except NameError: - raise IndexError - # load event buffer del self._events[:] self._index = 0 - data = self._file.read(16384) - if data: - self._parser.feed(data) - else: - self._root = self._parser.close() - self._parser = None else: - self._index = self._index + 1 - return item + if item[1].initialized: + self._index = self._index + 1 + return item + if self._parser is None: + self.root = self._root + try: + raise StopIteration + except NameError: + raise IndexError + # load event buffer + data = self._file.read(16384) + if data: + self._parser.feed(data) + else: + self._root = self._parser.close() + self._parser = None try: iter @@ -1041,6 +1047,7 @@ def close(self): assert len(self._elem) == 0, "missing end tags" assert self._last != None, "missing toplevel element" + self._last.initialized = True return self._last def _flush(self): @@ -1074,6 +1081,8 @@ def start(self, tag, attrs): self._flush() + if self._last is not None: + self._last.initialized = True self._last = elem = self._factory(tag, attrs) if self._elem: self._elem[-1].append(elem)