mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	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])
 |