Have you compared it to the C implementation of ElementTree?
With stanzas like
for event, n in ElementTree.iterparse(xmlfile, events=("end",)):
if n.tag == "blar":
# do stuff
n.clear()
it doesn't even take much memory to parse files of arbitrary size.