import xml.etree.ElementTree as ET class XmlParser: def __init__(self): self.pm = self def display(self, result): pass def parseXml(self, dict, name): for event, elem in ET.iterparse(name, events=('start', 'end')): try: try: self.display(apply( dict[elem.tag], [self, event == 'start', elem])) except Exception, e: print '\nevent error (%s): %s[%s]' % (e, elem.tag, event) return except Exception, e: print '\nunhandled exception (%s): %s[%s]' % (e, elem.tag, event) return self class TestFile(XmlParser): def __init__(self, name): XmlParser.__init__(self) self.name = name self.x = 0 def parse(self): self.parseXml(TestFile.__dict__, self.name) def a(self, ev, elem): pass def b(self, ev, elem): if ev != None: if elem.text == None: raise Exception((self.x, ev, elem)) self.x = self.x + 1 xml = TestFile('test.xml') xml.parse()