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