Try to fix transient refleaks in test_asynchat.
[python.git] / Demo / xml / elem_count.py
blobf4e6ef53267d6225f7e0468c87f9d10eba7cb046
1 """
2 A simple demo that reads in an XML document and displays the number of
3 elements and attributes as well as a tally of elements and attributes by name.
4 """
6 import sys
7 from collections import defaultdict
9 from xml.sax import make_parser, handler
11 class FancyCounter(handler.ContentHandler):
13 def __init__(self):
14 self._elems = 0
15 self._attrs = 0
16 self._elem_types = defaultdict(int)
17 self._attr_types = defaultdict(int)
19 def startElement(self, name, attrs):
20 self._elems += 1
21 self._attrs += len(attrs)
22 self._elem_types[name] += 1
24 for name in attrs.keys():
25 self._attr_types[name] += 1
27 def endDocument(self):
28 print "There were", self._elems, "elements."
29 print "There were", self._attrs, "attributes."
31 print "---ELEMENT TYPES"
32 for pair in self._elem_types.items():
33 print "%20s %d" % pair
35 print "---ATTRIBUTE TYPES"
36 for pair in self._attr_types.items():
37 print "%20s %d" % pair
39 if __name__ == '__main__':
40 parser = make_parser()
41 parser.setContentHandler(FancyCounter())
42 parser.parse(sys.argv[1])