mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 13:11:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			37 lines
		
	
	
	
		
			1,005 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
	
		
			1,005 B
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | 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]) |