| import sys | 
 |  | 
 | from xml.sax import make_parser, handler | 
 |  | 
 | class FancyCounter(handler.ContentHandler): | 
 |  | 
 |     def __init__(self): | 
 |         self._elems = 0 | 
 |         self._attrs = 0 | 
 |         self._elem_types = {} | 
 |         self._attr_types = {} | 
 |  | 
 |     def startElement(self, name, attrs): | 
 |         self._elems = self._elems + 1 | 
 |         self._attrs = self._attrs + len(attrs) | 
 |         self._elem_types[name] = self._elem_types.get(name, 0) + 1 | 
 |  | 
 |         for name in attrs.keys(): | 
 |             self._attr_types[name] = self._attr_types.get(name, 0) + 1 | 
 |  | 
 |     def endDocument(self): | 
 |         print "There were", self._elems, "elements." | 
 |         print "There were", self._attrs, "attributes." | 
 |  | 
 |         print "---ELEMENT TYPES" | 
 |         for pair in  self._elem_types.items(): | 
 |             print "%20s %d" % pair | 
 |  | 
 |         print "---ATTRIBUTE TYPES" | 
 |         for pair in  self._attr_types.items(): | 
 |             print "%20s %d" % pair | 
 |  | 
 |  | 
 | parser = make_parser() | 
 | parser.setContentHandler(FancyCounter()) | 
 | parser.parse(sys.argv[1]) |