mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 bc470d5023
			
		
	
	
		bc470d5023
		
	
	
	
	
		
			
			svn+ssh://pythondev@svn.python.org/python/trunk ........ r75358 | georg.brandl | 2009-10-11 17:06:44 +0200 (So, 11 Okt 2009) | 1 line Overhaul of Demo/xml. ........
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| A simple demo that reads in an XML document and displays the number of
 | |
| elements and attributes as well as a tally of elements and attributes by name.
 | |
| """
 | |
| 
 | |
| import sys
 | |
| from collections import defaultdict
 | |
| 
 | |
| from xml.sax import make_parser, handler
 | |
| 
 | |
| class FancyCounter(handler.ContentHandler):
 | |
| 
 | |
|     def __init__(self):
 | |
|         self._elems = 0
 | |
|         self._attrs = 0
 | |
|         self._elem_types = defaultdict(int)
 | |
|         self._attr_types = defaultdict(int)
 | |
| 
 | |
|     def startElement(self, name, attrs):
 | |
|         self._elems += 1
 | |
|         self._attrs += len(attrs)
 | |
|         self._elem_types[name] += 1
 | |
| 
 | |
|         for name in attrs.keys():
 | |
|             self._attr_types[name] += 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)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     parser = make_parser()
 | |
|     parser.setContentHandler(FancyCounter())
 | |
|     parser.parse(sys.argv[1])
 |