#!/usr/bin/python import sys import xml.sax # ------------------------------------------------------------- class MyHandler(xml.sax.ContentHandler): def __init__(self): xml.sax.ContentHandler.__init__(self) # super constructor self.path = [] # do some init self.pathstr = '' def getParentElement(self): """Return the immediate parent element name.""" if len(self.path) == 0: return None return self.path[-1] def descendentOf(self, name): """Return True if the current path contains the given name.""" try: self.path.index(name) return True except: return False def getPathStr(self): """Return the path as a string.""" return '/'.join(self.path) def startElement(self, name, attrs): """Handle the start of an element and do normal processing.""" sys.stdout.write('<%s> ' % name) sys.stdout.write(' path=%s ' % self.getPathStr()) sys.stdout.write(' parent=%s ' % self.getParentElement()) sys.stdout.write(' descOf(emplist)=%s\n' % \ self.descendentOf('emplist')) # normal processing self.path.append(name) # track the path def endElement(self, name): """Handle the end of the element.""" self.path.pop() # track the path # MAIN -------------------------------------------------------- someXml = """ Jorgensen Parts Beej Jorgensen B$3490 """ handler = MyHandler() xml.sax.parseString(someXml, handler)